java - 精度损失

标签 java precision

我尝试运行以下代码:

double f = 4.35; 
int n = (int) (100 * f); 

n 将为 434。为什么?

最佳答案

4.35 不能精确地表示为 float ,因为 .35 不是 2 的(负)幂。因此,会以某种方式进行一些舍入。乘以 100 时也可能会进行舍入。如果结果数字略小于 435,则转换为 int 将取底,即 434。

如果您想四舍五入到最接近的整数,您可以将结果加 0.5,然后转换为 int。这是舍入数字的最通用方法,尽管 Java 有一个内置的舍入实现。

double f = 4.35; 
int n = (int) (100 * f + 0.5); 

关于java - 精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111212/

相关文章:

c - 如何定义大于 16 字节的 float 据类型?

c++ - stringstream 和 double 的精度问题

python - np.arange 的奇怪行为

java - Java中检查字符串是否是有效的英文单词

java - 我可以在 oracle 随 java SE JDK 提供的默认 JRE 上运行 Java EE 程序吗?

java - 如何检测会导致 Java 8 中的 ClassCastException 的不明确方法调用?

C++ 不截断 double ?

java - 不能使用repaint()吗?

Javamail 事件监听器未收到任何事件

math - 为什么浮点运算在添加小数时不能给出准确的结果?