在Java中,如何舍入大于long type max value的数字?
我必须处理非常大的双精度值,并且必须将它们四舍五入到下一个整数。如果我对双精度值进行四舍五入,我总是会收到值9.223372036854776E18,这恰好是最大长精度值。如何舍入大于此值的值在Java中,如何舍入大于long type max value的数字?,java,type-conversion,rounding,Java,Type Conversion,Rounding,我必须处理非常大的双精度值,并且必须将它们四舍五入到下一个整数。如果我对双精度值进行四舍五入,我总是会收到值9.223372036854776E18,这恰好是最大长精度值。如何舍入大于此值的值 编辑:只是为了澄清一下:我不是Java程序员,来自C前端。我在帮一个朋友处理这个案子。我尝试了unsigned(显然不起作用),通过谷歌搜索找到了BigDecimal和biginger。我试着投下它们,但它碰巧撞坏了。这就是我来这里的原因。谢谢你帮助我 BigDecimal将是包含大于long的值的解决方
编辑:只是为了澄清一下:我不是Java程序员,来自C前端。我在帮一个朋友处理这个案子。我尝试了unsigned(显然不起作用),通过谷歌搜索找到了BigDecimal和biginger。我试着投下它们,但它碰巧撞坏了。这就是我来这里的原因。谢谢你帮助我
BigDecimal
将是包含大于long的值的解决方案
读这个
您需要实例化
BigDecimal(您的doublevalue)代码>不强制转换。BigDecimal
将是包含大于long的值的解决方案
读这个
您需要实例化BigDecimal(您的doublevalue)代码>不铸造。使用
e、 g
使用
e、 g
BigDecimal可以保存任何双精度和浮点值。要将double转换为BigDecimal,请使用以下代码:
double reallyBigDouble
BigDecimal x = new BigDecimal(reallyBigDouble);
BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));
要舍入到最接近的整数值,可以使用如下代码:
double reallyBigDouble
BigDecimal x = new BigDecimal(reallyBigDouble);
BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));
BigDecimal可以保存任何双精度和浮点值。要将double转换为BigDecimal,请使用以下代码:
double reallyBigDouble
BigDecimal x = new BigDecimal(reallyBigDouble);
BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));
要舍入到最接近的整数值,可以使用如下代码:
double reallyBigDouble
BigDecimal x = new BigDecimal(reallyBigDouble);
BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));
实质上:
Math.floor(d+0.5)
但如果d
为负值,则必须调整为减法。本质上:
Math.floor(d+0.5)
但如果d
为负值,则必须调整为减法。任何太大而无法放入long
的double
值都已表示整数值,四舍五入将无效。这是因为一个double只能保存其有效位上的52位精度,而long只能保存64位精度——因此,如果该值对于long
来说太大,double
没有足够的精度来容纳任何小数部分。任何double
值太大而无法放入long
已表示整数值,四舍五入将无效。这是因为一个double只能在其有效位上保存52位的精度,而long只能保存64位——因此,如果该值对于long
来说太大,那么double
就没有足够的精度来保存任何小数部分。我已经尝试将double值强制转换为BigDecimal和biginger。但它每次都会崩溃。请提供异常消息和您尝试过的代码。@Tom:没有在原语和引用类型之间转换的事情。您应该执行BigDecimal.valueOf(doubleValue)
;我已经尝试将双精度值转换为BigDecimal和BigInteger。但它每次都会崩溃。请提供异常消息和您尝试过的代码。@Tom:没有在原语和引用类型之间转换的事情。您应该执行BigDecimal.valueOf(doubleValue)
;这实际上是解决我问题的最简单的方法。谢谢这实际上是解决我问题的最简单的方法。谢谢