Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中从double到int的转换精度降低_Java_Precision - Fatal编程技术网

Java中从double到int的转换精度降低

Java中从double到int的转换精度降低,java,precision,Java,Precision,我试着测试下面的代码,它给了我一个434对n的结果,这是我没有预料到的,这种精度损失的原因是什么 double f = 4.35; int n = (int) (100 * f); // n will be 434 - why? n = (int) Math.round(100*f); // n will be 435 浮点数不能准确表示浮点数 您可以尝试打印它,您将看到100*f=434.999999。该双精度的int值将是434,因为它将截断小数部分 round方法将四舍五入到最接近的i

我试着测试下面的代码,它给了我一个434对n的结果,这是我没有预料到的,这种精度损失的原因是什么

double f = 4.35;
int n =  (int) (100 * f); // n will be 434 - why?
n = (int) Math.round(100*f); // n will be 435

浮点数不能准确表示浮点数

您可以尝试打印它,您将看到
100*f=434.999999
。该双精度的
int
值将是
434
,因为它将截断小数部分


round
方法将四舍五入到最接近的
int
数字,即
435

浮点不能准确表示浮点数字

您可以尝试打印它,您将看到
100*f=434.999999
。该双精度的
int
值将是
434
,因为它将截断小数部分


round
方法将四舍五入到最接近的
int
数字,即
435

浮点不完美。它使用近似值

特别是,
double
s不能代表所有数字。正如
1/3
不能用有限位数精确地表示为十进制,同样
4.35
也不能用有限位数的二进制表示

所以我们得到了四舍五入的结果。接近
4.35
,但不完全相等的值。 在这种情况下,它稍微小一些,所以当你把它乘以100,你不会得到435,你会得到几乎435,这是不一样的

当您强制转换到
int
时,您会截断结果,因此
434999…
将变成
434

相反,使用
Math.round
时,将
434999…
转换为精确的
435
(可以精确表示)


如果需要精确表示
4.35
,请查看Java类型。

浮点并不完美。它使用近似值

特别是,
double
s不能代表所有数字。正如
1/3
不能用有限位数精确地表示为十进制,同样
4.35
也不能用有限位数的二进制表示

所以我们得到了四舍五入的结果。接近
4.35
,但不完全相等的值。 在这种情况下,它稍微小一些,所以当你把它乘以100,你不会得到435,你会得到几乎435,这是不一样的

当您强制转换到
int
时,您会截断结果,因此
434999…
将变成
434

相反,使用
Math.round
时,将
434999…
转换为精确的
435
(可以精确表示)


如果需要精确地表示
4.35
,请查看Java类型。

因为4.35不能用
double
精确地表示。欢迎使用浮点。请阅读的可能副本,因为4.35不能用
double
精确表示。欢迎使用浮点。请阅读可能的副本,谢谢您的回答!为什么100*f=434.999999不是435?@user133466正如roioppi所说,浮点有一个限制。浮点数无法精确表示。因为“f”一开始不是4.35@我已经告诉过你了。谢谢你的回答!为什么100*f=434.999999不是435?@user133466正如roioppi所说,浮点有一个限制。浮点数无法精确表示。因为“f”一开始不是4.35@我已经告诉过你了。