1234567.99
不能完全表示为浮点数。最近的浮点数实际上等于 1234568。
如果你想要更高的精度,你可以使用 double:1234567.99d
会做你所期望的。
您可以运行这个简单的测试来检查它(它在 Java 中,但通过替换 可以很容易地在 android 上转置println
):
public static void main(String[] args) {
float f = 1234567.99f;
double d = 1234567.99d;
System.out.println(new BigDecimal(f));
System.out.println(new BigDecimal(d));
}
印刷:
1234568
1234567.98999999999068677425384521484375
注意:String.valueOf(double)
确实将双精度数舍入为相同双精度数的另一种表示形式,小数点较少。换句话说,正如您在上面看到的,1234567.99d
不能表示为双精度数,而最近的双精度数是1234567.98999999999068677425384521484375
. 但是String.valueOf
计算出来并使用该双精度的第一个表示形式(只有 2 个小数),因为根据语言的规范,它们实际上是相同的双精度。