Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 有人能给我解释一下为什么0.15-0.10=0.049吗?;_Java_Math - Fatal编程技术网

Java 有人能给我解释一下为什么0.15-0.10=0.049吗?;

Java 有人能给我解释一下为什么0.15-0.10=0.049吗?;,java,math,Java,Math,这么流浪。。。 我有这个密码 double Restant = 0; Restant = 0.15 - 0.10; 它给了我 0.049999999 有人能解释一下为什么会这样吗? 现在,在这之前有一个奇怪的操作。浮点计算的结果必须经常进行四舍五入,以适应其有限表示形式。这种舍入误差是浮点计算的特征。请改用。浮点计算的结果必须经常四舍五入,以适应其有限表示形式。这种舍入误差是浮点计算的特征。请改用。浮点不准确。使用阈值来确定特定结果是否“足够接近”以被视为相等。例如 double EPSILO

这么流浪。。。 我有这个密码

double Restant = 0;
Restant = 0.15 - 0.10;
它给了我 0.049999999 有人能解释一下为什么会这样吗?
现在,在这之前有一个奇怪的操作。

浮点计算的结果必须经常进行四舍五入,以适应其有限表示形式。这种舍入误差是浮点计算的特征。请改用。

浮点计算的结果必须经常四舍五入,以适应其有限表示形式。这种舍入误差是浮点计算的特征。请改用。

浮点不准确。使用阈值来确定特定结果是否“足够接近”以被视为相等。例如

double EPSILON = 0.0001;
double expected = 0.05;
double actual = 0.15 - 0.10;
boolean isEqual = Math.abs(actual - expected) < EPSILON;
double EPSILON=0.0001;
双预期=0.05;
双倍实际值=0.15-0.10;
布尔isEqual=Math.abs(实际-预期)

或者,仅仅使用Java的BigDecimal类是不准确的。使用阈值来确定特定结果是否“足够接近”以被视为相等。例如

double EPSILON = 0.0001;
double expected = 0.05;
double actual = 0.15 - 0.10;
boolean isEqual = Math.abs(actual - expected) < EPSILON;
double EPSILON=0.0001;
双预期=0.05;
双倍实际值=0.15-0.10;
布尔isEqual=Math.abs(实际-预期)

或者,只需使用Java的BigDecimal类

与定点数字不同,浮点数字有时(可以安全地假设“大部分时间”)无法返回数字的精确表示形式。这就是为什么5.6+5.8的结果是11.399999999


如果您想要一个定点算术,请改用BigDecimal。

与定点数字不同,浮点数字有时(可以安全地假设“大部分时间”)无法返回数字的精确表示形式。这就是为什么5.6+5.8的结果是11.399999999


如果要使用定点算术,请改用BigDecimal。

应根据需要限制小数位数。以下将给出预期结果:


System.out.println(String.format(“%.2f”,Restant))

您应该根据需要限制分数位数。以下将给出预期结果:


System.out.println(String.format(“%.2f”,Restant))

浮点数算术不准确浮点数的二进制表示是有限的,是不准确的近似值,对这些数字进行数学运算会增加这些不准确值。0.1不能准确地用二进制表示,它将无限重复,因此是近似的。另请参见Jon Skeet的回答:如果使用浮点,则需要理解浮点舍入。(例如,在二进制浮点中没有0.10或0.15的精确表示。)浮点运算不准确浮点数字的二进制表示是有限的,是不准确的近似值,对这些数字进行数学运算会加剧这些不准确。0.1不能在二进制中精确表示,它会无限重复,所以它是近似的。另请参见Jon Skeet的回答:如果使用浮点,则需要理解浮点舍入。(例如,二进制浮点中没有0.10或0.15的精确表示。)BigDecimal并不总是正确答案。除其他外,加工成本更高。定点(缩放整数)通常更可取。BigDecimal并不总是正确答案。除其他外,加工成本更高。定点(缩放整数)通常更可取。