Java DecimalFormat显示float和double的不同结果

Mus*_*eas 0 java floating-point double decimalformat

为什么结果不同?如果我使用浮动它得到,675如果我使用双我得到,674 ...不是很奇怪?

float f = 12345.6745;
double d = 12345.6745;

Locale l = Locale.forLanguageTag("es-ES");
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(l);
print(df.format(f));
>> 12.345,675

l = Locale.forLanguageTag("es-ES");
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(l);
print(df.format(d));
>> 12.345,674
Run Code Online (Sandbox Code Playgroud)

谢谢

Jon*_*eet 7

如果我使用浮动它得到,675如果我使用双我得到,674 ...不是很奇怪?

不是特别.您正在格式化不同的值.特别是,假设您实际更改了代码以便编译(使用ffloat 的后缀),即使您指定了 9位数,float也只能可靠地表示7.

无论是数字是准确 12345.6745.实际上,确切的值是:

f = 12345.6748046875
d = 12345.674499999999170540831983089447021484375
Run Code Online (Sandbox Code Playgroud)

看看那些,很明显为什么第三个小数位是5 f和4 d.

如果你想保留十进制数字,你应该考虑使用BigDecimal.