在Java中,如何舍入大于long type max value的数字?

在Java中,如何舍入大于long type max value的数字?,java,type-conversion,rounding,Java,Type Conversion,Rounding,我必须处理非常大的双精度值,并且必须将它们四舍五入到下一个整数。如果我对双精度值进行四舍五入,我总是会收到值9.223372036854776E18,这恰好是最大长精度值。如何舍入大于此值的值 编辑:只是为了澄清一下:我不是Java程序员,来自C前端。我在帮一个朋友处理这个案子。我尝试了unsigned(显然不起作用),通过谷歌搜索找到了BigDecimal和biginger。我试着投下它们,但它碰巧撞坏了。这就是我来这里的原因。谢谢你帮助我 BigDecimal将是包含大于long的值的解决方

我必须处理非常大的双精度值,并且必须将它们四舍五入到下一个整数。如果我对双精度值进行四舍五入,我总是会收到值9.223372036854776E18,这恰好是最大长精度值。如何舍入大于此值的值


编辑:只是为了澄清一下:我不是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)
;这实际上是解决我问题的最简单的方法。谢谢这实际上是解决我问题的最简单的方法。谢谢