项目场景:
当前在做个抽卡模拟插件,需要输出概率百分比。
因为Float或者Double计算总会有些精度问题,所以使用BigDecimal储存小数进行计算
问题描述:
原本通过 BigDecimal.scaleByPowerOfTen(2)来进行计算*100,发现输出字符串中多出了类似"E+1"之类的额外内容
原因分析:
Debug发现问题在scaleByPowerOfTen(2)这里
另外注意到450抽和500抽
(BigDecimal)rollProb
的输出数值都为0.2,但是经过相同处理后一个输出正常,一个异常。而且700抽中对
(BigDecimal)rollProb
进行直接赋值后也出现了相同问题。
450抽及之前的都是通过
new BigDecimal(0)
后通过
BigDecimal.add()
累加上来的。
500抽及700抽通过
new BigDecimal("(概率)")
后再进行赋值,可能和使用字符串初始化有关。
解决方案:
只能判断是scaleByPowerOfTen()或可能使用字符串初始化的问题,不知道如何解决。搜索之后发现stackoverflow有示例符合我当前遇到的问题。
于是将
scaleByPowerOfTen(2)
更换成
movePointRight(2)
,结果可以正常输出了
提问截图:
原链接:https://stackoverflow.com/questions/25454734/what-is-the-difference-between-bigdecimal-movepointright-and-scalebypoweroften
版权归原作者 Cute_LuoBo 所有, 如有侵权,请联系我们删除。