6

这里有一个关于在 Java 中舍入小数的好问题。但我想知道如何在我的程序中包含尾随零以显示价格,例如:1.50 美元、1.00 美元

的简单解决方案

String.format("%.2g%n", 0.912385);

工作得很好,但如果它在最后一个小数位,则省略尾随零。这个问题出现在我的程序中,即使我只使用这样的表达式:

double price = 1.50;

当我使用不同的价格(加法、乘法等)进行计算时,结果主要显示如下:

$2.5000000000000003

因此,使用 String.format 可以很好地达到此目的,但它会将上面的示例截断为

$2.5

是否有适当的方法在小数点后第二位显示尾随零?或者如果计算的输出应该是两个零

$2.00
4

5 回答 5

20

我建议你这样做:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));

这也具有特定于语言环境的优点。例如,如果您在欧元区而不是美国,这将起作用。

于 2009-11-14T14:03:56.773 回答
14

虽然其他答案是完全有效的(尤其是 duffymo 的答案),但您面临的问题比格式化显示要大得多。实际上,您对离散值的金额使用了完全错误的类型。而不是 a ,您应该真正考虑使用 a 。doublejava.lang.BigDecimal

(编辑:......或者像 duffymo 在评论中指出的那样实施良好的 Money 类,例如来自 JScience 的货币模块或更新的Joda-Money 的类- 它仍然作为正式版本发布。)

于 2009-11-14T14:15:28.780 回答
11

它可能可以使用 String.format(...) 来完成,但您可以使用DecimalFormat

double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50
于 2009-11-14T14:00:01.120 回答
4

你有没有尝试过:

String s = String.format("$%.2f", 2.50);

那会成功的。

于 2009-11-14T14:03:35.497 回答
0
public static String getFormattedData(String actualString) 
    {
        String subString = "0.0";

        if(actualString.contains("."))
        {   
            subString = actualString.substring(actualString.indexOf("."), actualString.trim().length()); 

            if(Double.parseDouble(subString) > 0.0)
                return actualString;
            else
                actualString = actualString.substring(0, actualString.indexOf("."));
        }
        return actualString;
    }
于 2013-01-31T11:00:27.293 回答