どのように適切にJavaで後続ゼロを含む2つの小数(セント)に価格を表示するには?
-
20-09-2019 - |
質問
Javaで小数点以下を四捨五入に良い質問があります<のhref = "https://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in- Javaの ">ここを。しかし、私は私のプログラムで価格を表示するには、末尾のゼロを含めることができますどのように思っていたような:$ 1.50 $ 1.00
のシンプルなソリューション
String.format("%.2g%n", 0.912385);
はうまく動作しますが、それは最後の小数点以下である場合には、末尾のゼロを省略します。問題は、私はこのような表現を使っていても、私のプログラムで起動します。
double price = 1.50;
私は(など、乗算、加算)異なる価格で計算を行うと、結果は、主に次のように表示されます:
$2.5000000000000003
だから、String.Formatのを使用して、この目的のために正常に動作しますが、それは
に上記の例を切り捨て$2.5
小数点以下第三位の末尾のゼロを表示する適切な方法はありますか?または計算の出力がなければならない場合はゼロの両方
$2.00
解決
私はあなたがこれを行うことをお勧めします:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));
これは、同様に、ロケール固有であることの長所を有しています。あなたの代わりに、米国のユーロ圏にいる場合、これは、例えば、動作します。
他のヒント
、あなたはディスプレイをフォーマットよりもはるかに大きな問題を抱えています。あなたが実際にの離散の値であり、金額には全くの間違ったのタイプを使用しています。代わりにdouble
の、あなたは本当に java.lang.BigDecimal
<使用することを検討すべきです/>。
(EDIT:...またはウェル実装マネークラスduffymoはJScienceの<のhref = "http://jscience.org/api/org/jscience/economics/moneyの例クラスの、コメントで指摘したように/package-summary.html#package_description」relが= "noreferrer">金銭のモジュールまたはより最近のジョダ-Money を - 。まだ正式版としてリリースする必要があります)。
<それはおそらくString.Formatの(...)で行うことができますが、あなたが使用できるのhref = "http://java.sun.com/j2se/1.5.0/docs/api/java/text /DecimalFormat.html」のrel = "noreferrer"> 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;
}