我要处理非常大的双重值,我必须将它们舍入到下一个完整数字。如果我舍入双值,我总是会收到值 9.223372036854776E18 ,这恰好是最大长值。如何舍入大于此值的值?
编辑:只是为了澄清:我不是Java程序员,而是来自C前端。我在这个案子上帮朋友。我尝试了unsigned(显然没有用),谷歌搜索并找到了BigDecimal和BigInteger。尝试投掷他们,它碰巧崩溃。这就是我来到这里的原因。谢谢你的帮助!
答案 0 :(得分:5)
答案 1 :(得分:3)
本质上:
Math.floor(d+0.5)
但如果d
为负数,则必须调整为减法。
答案 2 :(得分:2)
答案 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
没有足够的精度保留任何小数部分。