如何正确地显示的价格达到两位小数(美分)包括尾零Java?
-
20-09-2019 - |
题
有一个很好的问题上,四舍五入的小数在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;
}
不隶属于 StackOverflow