如何增加浮数而没有奇数

时间:2019-01-26 09:04:17

标签: android

所以我试图用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,但仍然无法正常工作。 为什么会这样?以及如何使其正确。请帮助

1 个答案:

答案 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));