Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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
如何检查Double是否有java舍入?_Java_Double_Bigdecimal - Fatal编程技术网

如何检查Double是否有java舍入?

如何检查Double是否有java舍入?,java,double,bigdecimal,Java,Double,Bigdecimal,是否需要检查Double是否有java舍入,例如-260.01079999996 我有一个系统,它传递一个计算出的双精度值。右边应该是-260.0108。当使用浮点和双精度时,舍入的“问题”是由于数字计算机的限制 如果不需要舍入,请使用整数。如果需要在逗号后用固定位数保存数字,请使用BigDecimal;或者总是在逗号后的第X位将双精度四舍五入;或者在视图中显示之前,将数字作为整数除以或乘以10^n(详见下文) 例如,您可以将-2600108保存为整数和系数1000。在这种情况下,加法、减法、乘

是否需要检查Double是否有java舍入,例如-260.01079999996


我有一个系统,它传递一个计算出的双精度值。右边应该是-260.0108。

当使用浮点和双精度时,舍入的“问题”是由于数字计算机的限制

如果不需要舍入,请使用整数。如果需要在逗号后用固定位数保存数字,请使用
BigDecimal
;或者总是在逗号后的第X位将双精度四舍五入;或者在视图中显示之前,将数字作为整数除以或乘以
10^n
(详见下文)


例如,您可以将
-2600108
保存为整数和系数
1000
。在这种情况下,加法、减法、乘法和保存工作完美无缺,没有副作用。除法需要双倍运算。

如果您从外部证据中知道,代码中某一点的确切答案必须是整数,请四舍五入到最接近的整数

否则,您将通过计算获得最精确的双精度结果,使用DecimalFormat仅打印有意义的数字

“java舍入”没有什么特别之处。特别的是,默认输出保留了足够的数字来唯一标识double。默认情况下,许多其他语言将舍入到更少的数字,这会降低准确性,但会使结果看起来更整洁

如果计算中的每个数字都可以精确地表示为一个小的小数点,那么使用BigDecimal是一个巨大的成功。这在货币计算中经常发生。然而,一旦你碰到一个分数,比如1/3,它不能精确地用任何有限的十进制数字来表示,你就必须处理舍入误差。对于许多财务计算,四舍五入有固定的规则


从理论上讲,BigDecimal也可以用来获得额外的精度,但这几乎不实用。

为什么要麻烦呢?只需使用
BigDecimal
就可以了,不用担心。通常你会将其与任意ε值进行比较。尽管称之为“取整问题”似乎有点奇怪,因为没有人做任何舍入,也没有人要求。你应该总是假设有一个潜在的舍入问题,除非你知道没有t@TedTrippinBigDecimal仍然存在舍入和表示问题,因此您仍然需要担心它。如果您知道数字的最大位数可以是多少理论上有,然后你可以检查它是否有更多。但这听起来很像XY问题——你想用它解决什么问题?