0


Java中BigDecimal使用scaleByPowerOfTen()提升小数点后出现“E+*”问题踩坑

项目场景:

当前在做个抽卡模拟插件,需要输出概率百分比。
因为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

标签: java 字符串

本文转载自: https://blog.csdn.net/qq_41046428/article/details/115796057
版权归原作者 Cute_LuoBo 所有, 如有侵权,请联系我们删除。

“Java中BigDecimal使用scaleByPowerOfTen()提升小数点后出现“E+*”问题踩坑”的评论:

还没有评论