所以我试图用float来增加数字,但是有时候它是一个奇怪的数字,但是我只想要一个像0.1, 0.2, until 5.0
这样的数字,但是有时候它却带有一个像0.9000001
这样的奇怪数字
这是我增加浮点数的代码
addRattingBtn.onClick {
quantity += 0.1f
if (quantity >= 5.0f) {
toast("maximum")
return@onClick
}
totalRatting(quantity.toBigDecimal())
}
我已经将其转换为BigDecimal,但仍然无法正常工作。 为什么会这样?以及如何使其正确。请帮助
答案 0 :(得分:2)
这是因为任何浮点值集的有限非零值都可以表示为s·m·2(e-N + 1),其中s为+1或-1,m为正数小于2N的整数,e是Emin =-(2K-1-2)和Emax = 2K-1-1(含)之间的整数,其中N和K是取决于值集的参数。因此,浮点值不能准确地表示以10为底的实数,并且在继续添加它们时,它们有时会失去精度并显示出这样的结果,因此应使用大十进制表示精度。
例如:
BigDecimal number = new BigDecimal(0.1);
BigDecimal add = number.add(new BigDecimal(0.1));