四舍五入在Android中无法正常工作

pyu*_*s13 -2 java android

我使用以下代码来舍入十进制数

private float roundOffTwoDigits(float number) {
    DecimalFormat toTheFormat = new DecimalFormat("0.0");
    toTheFormat.setRoundingMode(RoundingMode.DOWN);
    number = Float.valueOf(toTheFormat.format(number));
    return number;
}
Run Code Online (Sandbox Code Playgroud)

现在有我得到的输出

输入输出

2.2> 2.2

2.21> 2.2

2.28> 2.2

2.4> 2.4

2.6> 2.5(为什么2.5应该是2.6)

2.8> 2.7(为什么2.7应该是2.8)

因此,即使是小数位后的数字,如果它大于5,它也会减少不应该发生的值.

有人用这个问题标记了我的问题重复这里是浮点数学吗?,我不确定为什么?

这个问题与java和android完全没有关系,也没有我期待的答案和讨论.

Pau*_*ton 5

该方法已正确舍入.2.6不能完全表示为a float.当你写作float a = 2.6F;,a真的

2.599999904632568359375
Run Code Online (Sandbox Code Playgroud)

要正确地执行此操作,您应该float完全免除,并使用BigDecimal它的String构造函数来完成它.

  • @ pyus13它与Java无关.浮点算术困扰所有语言.基本上,如果你有一个最简单形式的分数'a/b`,它将不是一个精确的浮点值,除非`b`是'2'的幂.所以`1.25`是一个'浮动',因为它是'5/4`但是`3.7`不是因为它是'37/10`而且'10`不是'2'的幂.我不认为浮点值是否会低于或低于您期望的数字有任何简单的逻辑. (3认同)