如何在Java中舍入大于long类型最大值的数字?

时间:2012-11-09 03:17:18

标签: java type-conversion rounding

我要处理非常大的双重值,我必须将它们舍入到下一个完整数字。如果我舍入双值,我总是会收到值 9.223372036854776E18 ,这恰好是最大长值。如何舍入大于此值的值?

编辑:只是为了澄清:我不是Java程序员,而是来自C前端。我在这个案子上帮朋友。我尝试了unsigned(显然没有用),谷歌搜索并找到了BigDecimal和BigInteger。尝试投掷他们,它碰巧崩溃。这就是我来到这里的原因。谢谢你的帮助!

5 个答案:

答案 0 :(得分:5)

BigDecimal将是包含大于long的值的解决方案。

阅读此BigDecimal javadoc

您需要实例化BigDecimal(yourDoubleValue);而不是投射。

答案 1 :(得分:3)

本质上:

Math.floor(d+0.5)

但如果d为负数,则必须调整为减法。

答案 2 :(得分:2)

使用BigDecimal

e.g。

BigDecimal decimalA = new BigDecimal("98765432123456789");

答案 3 :(得分:2)

BigDecimal可以保存任何double和float值。要从double转换为BigDecimal,请使用以下代码:

double reallyBigDouble
BigDecimal x = new BigDecimal(reallyBigDouble);

要舍入到最接近的整数值,可以使用如下代码:

BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));

答案 4 :(得分:2)

任何double值太大而无法放入long已经表示整数值,并且舍入它将无效。这是因为double只对其有效数字保持52位精度,而long持有64位 - 所以如果long的值太大,则double没有足够的精度保留任何小数部分。