1

我有一个String价值;而且我需要始终使用 2 位小数作为Double类型;所以,如果我得到500,我需要将其转换500.00为始终为双精度值。

我的问题是当我有类似xxx.00orxxx.x0的东西时,parseDouble 方法会删除第二个 0。

我的代码是这样的

String number = "500.00";
Double numberToSave = (Double.ParseDouble(number));

numberToSave返回500.0

关于如何解决这个问题的任何想法?我需要显示第二个小数,即使它是0.

谢谢你。

4

5 回答 5

5

Double没有任何维护微不足道的数字的概念。

问题不在于您使用的Double(or ) 值 - 而是您如何将其转换字符串。您应该使用 a来指定适当的小数位数。doubleDecimalFormat

另请注意,您当前正在使用Double.parseDoublewhich 返回 a double,但您将其分配给一个Double变量,该变量会将值装箱 - 可能是不必要的。

示例代码:

import java.text.DecimalFormat;

public class Test {
    public static void main(String[] args) {
        String text = "500.00";
        double number = Double.parseDouble(text);

        DecimalFormat format = new DecimalFormat("0.00");
        String formatted = format.format(number);
        System.out.println(formatted);
    }
}

请注意,即使有更多数字可用,上面的代码也会给您两位小数。

此外,如果确切的十进制数字对您很重要,您可能需要考虑使用BigDecimal而不是double. 如果您的值实际上代表货币,这一点尤其重要。您应该了解浮点二进制点类型(例如double)和浮点小数点类型(例如)之间的区别,BigDecimal并在它们之间进行适当的选择。

于 2013-06-24T14:21:32.370 回答
2

也总是String.format有,

String.format("%.2f", d)

如果您只担心打印格式化的值,您可以使用System.out.printf,

double d = 500;
System.out.printf("%.2f%n", d);  // %n is a line-break
500.00
于 2013-06-24T14:22:54.993 回答
1

您需要使用DecimalFormat该类。

像这样的东西DecimalFormat df = new DecimalFormat("#.##");

看看java 文档

于 2013-06-24T14:21:12.983 回答
1

您可能想查看DecimalFormat该类,它可用于像这样格式化双打:

import java.text.*;

public class FormatDoubleTest
{
    public static void main(String[] args)
    {
        double d1 = 500.00;
        double d2 = 500.001;
        double d3 = 500.009;

        DecimalFormat df = new DecimalFormat("0.00");

        System.out.println(df.format(d1));
        System.out.println(df.format(d2));
        System.out.println(df.format(d3));

    }
}
于 2013-06-24T14:21:45.950 回答
0

使用一个NumberFormat对象。

String number = "500.00";
Double numberToSave = (Double.ParseDouble(number));
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(3);
System.out.println(nf.format(numberToSave));
于 2013-06-24T14:23:09.547 回答