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

标签 java floating-point double decimalformat

为什么结果不一样? 如果我使用 float,它会得到 675,如果我使用 double,我会得到 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

谢谢

最佳答案

If i use float it get ,675 and if i use double i get ,674... isnt that weird?

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

这两个数字都不完全 12345.6745。事实上,确切的值是:

f = 12345.6748046875
d = 12345.674499999999170540831983089447021484375

看看这些,很明显为什么 f 的小数点后第三位是 5,d 的小数点后第三位是 4。

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

关于Java DecimalFormat 显示 float 和 double 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600376/

相关文章:

java - Maven 无法构建 pom

java.lang.IllegalAccessException : is related to public/private attribute for classes? 异常

c - 将双关语输入整数并排序

c# - Json 属性 C# 的双重标签

java - java中的十进制数字总和

java - Android,在网络共享和连接到接入点时检测 WiFi 的本地 IP 和子网掩码

python - python 中的 float 的奇怪问题

c++ - 将 double 舍入到最接近的非次正规表示

printf() 能否为值 (-0.5) 生成 "-.5"?

java - 在 Spring Integration 中将 MessageHeader 的键设置为 'NEW' 时出现 SpelParseException