增加双值的最后一位数

时间:2013-06-03 13:05:30

标签: java

我有一个双变量,就像80.14666666666668然后我用floor函数截断它直到8位数,如80.14666666。现在我想增加这个值并得到答案为80.14666667

4 个答案:

答案 0 :(得分:2)

您可能没有意识到double的真实性质。他们没有“数字”;它们是有理数的紧凑二进制编码。因此,您会发现很难以编程方式确定double的“最后一位数字”。

如果您的具体需求只是四舍五入,那么请使用round函数代替truncate;否则考虑使用BigDecimal,它真正代表一个带十进制数字的数字。

答案 1 :(得分:0)

快速方法是:

double myNumber = 80.14666666;
myNumber += (1 / 10^8); // = 80.14666667

这就是你要找的东西吗?

答案 2 :(得分:0)

double实际上并不包含您想象的确切值。这是因为底层字段是二进制数字,由于系数为1/5,因此不能包含十分之一。

相反,您可以使用新的BigDecimal(“80.14666666”)并通过新的BigDecimal(“0.00000001”)递增。

请注意,我传递一个字符串来初始化此对象。如果传递一个double,BigDecimal将根据double的值进行初始化,如前所述,double不包含您想象的确切值。

答案 3 :(得分:0)

只需将0.00000001添加到该号码即可。

但是,浮点值不太适合这样计数。每次增加它时,都会添加一个差异,因为这样的数字只表示在浮点数中。

如果要增加数字,请改用整数。将数字乘以100000000并将其转换为整数,以便得到8014666666.现在,您可以将整数递增1而不会引入任何错误。保持整数递增,并根据需要将其转换为浮点格式除以100000000.浮点值当然仍然具有精度限制,但每一个都是从整数对应转换的结果,并且整数值没有任何精度问题,因此每次增量时都不会累积错误。