有一个很好的问题上,四舍五入的小数在Java 在这里,.但我想知道如何可以包括我的尾随零显示的价格在我的节目,如:$1.50,1.00美元

简单的解决办法的

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

工作得很好,但是忽略的尾零如果在最后的小数点后一位。问题来了在我的节目虽然我只能使用的表情是这样的:

double price = 1.50;

当我这样做的计算不同的价格(加,乘,等等。) 结果主要显示是这样的:

$2.5000000000000003

因此,使用的字符串。格式的工作的现用于这一目的,但是它截断上述例子来

$2.5

是否有一个适当的方式来显示的尾零第二十进制的地方吗?或两个零如果输出的一个计算应

$2.00
有帮助吗?

解决方案

我会建议你这样做:

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

这具有凭借是区域特异性为好。这将工作,例如,如果你在欧元区,而不是美国的时候。

其他提示

而其他的回答是完全有效的(尤其是duffymo的一),您有一个更大的问题,比格式显示。你实际上是采用一个完全 错误的 类型的金钱数额是 离散 值。而不是一个 double, 你真的应该考虑使用 java.lang.BigDecimal.

(编辑:...或实现的金钱类duffymo指出,在评论,例如类JScience的 货币 模块或者更近 乔达-钱 -这仍然被释放作为一个正式的版本。)

这或许可以用的String.format(...)可以做到,但你可以使用的 DecimalFormat

double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50

你试过:

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

这将达到目的。

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;
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top