我尝试了 Math.round 和 String.format 函数来舍入浮点/双精度值。
1)使用Math.round函数
npm install async --save
对于floatValue 40.55,结果为40.6 //正确且符合预期的结果。
对于floatValue 30.05,结果为30.0 //错误的结果。预期结果:30.1
2)使用String.format函数
Math.round(floatValue* 10.0) / 10.0;
对于floatValue 40.55,结果为40.6 //正确和预期的结果。
对于floatValue 59.65,结果为59.6 //错误的结果。预期结果:59.7
为什么相同的函数对于不同的float值表现不同。
答案 0 :(得分:0)
In可以通过可视化
float fv = 30.05f;
System.out.println((fv));
System.out.println((fv * 10.0));
System.out.println(Math.round(fv * 10.0));
System.out.println(Math.round(fv * 10.0) / 10.0);
结果
30.05
300.49999237060547
300
30.0
您可以看到30.05实际上存储为30.49999237060547,这就是为什么它出现四舍五入的原因。请在评论中查看@EricPostpischi更为简洁的解释。
请参见https://rules.sonarsource.com/java/tag/misra/RSPEC-1244
和