将浮点数转换为字符串时避免使用整数

时间:2012-11-20 18:42:46

标签: java android

我需要在将浮点数转换为字符串时避免使用舍入数字,我需要的数字完全相同。

在这一刻,如果我这样做:

String value =  String.valueOf(1234567.99);

值= 1234568.0,所以在施法后我需要值= 1234567.99。

3 个答案:

答案 0 :(得分:3)

1234567.99无法准确表示为浮点数。最近的浮点数实际上等于1234568。

如果你想要更高的精确度,你可以使用双倍:1234567.99d会做你期望的。

你可以运行这个简单的测试来检查它(它是Java,但可以通过替换println在android上轻松转换):

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)将double转换为另一个具有相同double的小数字的表示形式。换句话说,正如您在上面看到的那样,1234567.99d无法表示为double,而最近的double是1234567.98999999999068677425384521484375。但是String.valueOf计算它并使用该双精度的第一个表示(只有2个小数),因为根据语言的规范,它们实际上是相同的双精度。

答案 1 :(得分:1)

String.valueOf()永远不会将您遇到的其他任何问题都解决掉,但您可以尝试:

String value =  ""+1234567.99;

答案 2 :(得分: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);