辨析BigDecimal的toString()方法和toPlainString()方法

辨析BigDecimal的toString()方法和toPlainString()方法

toString()

toString方法会将BigDecimal的值以科学计数方式的字符串

但是转换成科学计数的方式也是有场景的,并不是所有的值都会转为科学计数方式的字符串,网上好几篇文章感觉都是照搬的一样,并没有详细的说明什么情况会以科学计数的方式输出字符串, 只能自己去扒了一下源码,

首先,任何一个BigDecimal都可以使用一个公式表示:
unscaledValue × 10-scale

解释一下:
unscaledValue :整数非标度值 (即去掉小数点的Bigdecimal的值,类型为BigInteger)
scale:标度值,如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。
如下,BigDecimal值为123.00,则unscaledValue 为12300,而scale为2,套用公式,则数值是相等的。
辨析BigDecimal的toString()方法和toPlainString()方法_第1张图片

然后再来看源码中toString方法中给的example:
辨析BigDecimal的toString()方法和toPlainString()方法_第2张图片
源码中该方法有很长的注释,主要介绍指数计算转换过程,简要总结了两种toString()方法会以科学计数方式输出的场景:
场景一:scale为负数,一定会转换为科学计数的方式

场景二:
需要先计算变动指数的值。公式为-scale+(unscaleValue.length-1),如果该值小于-6,那么则会使用科学计数的方式输出字符串

toPlainString()

原值输出为字符串

总结

当我们使用BigDecimal转成字符串时,大多其实是想单纯的使用toString方法,而并不想使用科学计数的方式,所以应该使用的是toPlainString方法

你可能感兴趣的:(java基础,BigDecimal,toPlainString方法,toString方法,辨析)