0

I need avoid round number when casting a float to string, I need the number is exactly the same.

In this moment if I make this:

String value =  String.valueOf(1234567.99);

The the value = 1234568.0 ,so I need the value = 1234567.99 after casting.

4

3 回答 3

3

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 个小数),因为根据语言的规范,它们实际上是相同的双精度。

于 2012-11-20T18:47:30.210 回答
1

String.valueOf() never round off any number you have some other issue but you can try it as:

String value =  ""+1234567.99;
于 2012-11-20T18:43:55.260 回答
0
String s = Double.toString(1234567.99);

更新:为了更好地控制字符串的格式,请使用DecimalFormatDecimalFormatSymbols

例如:

java.text.DecimalFormat formater = new java.text.DecimalFormat();
formater.setMinimumFractionDigits(0);
formater.setMaximumFractionDigits(3);
formater.setGroupingUsed(false);
java.text.DecimalFormatSymbols dfs = new java.text.DecimalFormatSymbols();
dfs.setNaN("NaN");
formater.setDecimalFormatSymbols(dfs);
String s = formater.format(1234567.99);
于 2012-11-20T18:47:59.527 回答