JDK 8 BigInteger精确缩小转换方法

在博客文章“ Java中Long到Int的精确转换 ”中,我讨论了使用Math.toIntExact(Long)来将Long精确地转换为int ,如果无法缩小转换范围,则抛出ArithmeticException

该方法是在JDK 8中引入的,后者还向BigInteger类引入了类似的缩小转换方法。 这些BigInteger方法是本文的主题。

BigInteger在JDK 8中添加了四个新的“精确”方法:

如上所述,通过JDK 8添加到BigInteger的这四个“精确”方法中的每一个都可以将BigInteger的值缩小到方法名称中的数据类型(如果可能)。 因为所有这些类型( byteshortintlong )的范围都小于BigInteger ,所以在任何这些情况下, BigDecimal中的值可能都比这四种类型中的任何一种都可以表示的大。 在这种情况下,所有这四个“精确”方法都抛出ArithmeticException而不是悄悄地“将”较大的值“强制”为较小的表示形式(对于大多数情况,这通常是一个无意义的数字)。

可以在GitHub上找到使用这些方法的示例。 执行这些示例时,输出如下所示:

===== Byte =====
125 => 125
126 => 126
127 => 127
128 => java.lang.ArithmeticException: BigInteger out of byte range
129 => java.lang.ArithmeticException: BigInteger out of byte range
===== Short =====
32765 => 32765
32766 => 32766
32767 => 32767
32768 => java.lang.ArithmeticException: BigInteger out of short range
32769 => java.lang.ArithmeticException: BigInteger out of short range
===== Int =====
2147483645 => 2147483645
2147483646 => 2147483646
2147483647 => 2147483647
2147483648 => java.lang.ArithmeticException: BigInteger out of int range
2147483649 => java.lang.ArithmeticException: BigInteger out of int range
===== Long =====
9223372036854775805 => 9223372036854775805
9223372036854775806 => 9223372036854775806
9223372036854775807 => 9223372036854775807
9223372036854775808 => java.lang.ArithmeticException: BigInteger out of long range
9223372036854775809 => java.lang.ArithmeticException: BigInteger out of long range

在带有JDK 8的BigInteger添加这些“精确”方法是一种受欢迎的方法,因为与数字缩小和溢出相关的错误可能很细微。 很高兴有一种简单的方法来获得“精确”的缩小,或者没有能力通过异常使缩小变得明显。

翻译自: https://www.javacodegeeks.com/2018/06/biginteger-exact-narrowing-conversion-methods.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值