2009-11-14 10 views
5

Javaの小数点以下を切り捨てるのに良い質問がありますhere。 $ 1.50Javaで末尾のゼロを含む最大2小数点以下の価格を正しく表示するにはどうすればよいですか?

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

の$ 1.00

簡単な解決策はうまく動作しますが、それはである場合は、末尾にゼロが省略されています。しかし、私はどのように私は次のように私のプログラムで価格を表示するために後続のゼロを含めることができます思っていました最後の小数点以下の桁数

$2.5000000000000003 
:私は異なる価格で計算(など、乗算、加算)結果は、主に次のように表示されない場合は

double price = 1.50; 

:問題は、私はこれだけのような表現を使用していても、私のプログラムで起動します

ので、String.Formatのを使用すると、小数点以下第三位で、末尾のゼロを表示するための適切な方法があり、この目的のために正常に動作しますが、それは

$2.5 

に上記の例を切り捨てます 場所?または計算の出力は

$2.00 
+4

大まかには、通貨を表すために浮動小数点数を使用しないでください。代わりにセント/ペンスに整数を使用することを検討してください。 – Pool

答えて

18

私はあなたがこれを行うことをお勧めします:

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

は、これは、同様に、ロケール固有のことの美徳を持っています。これは、たとえば、あなたが米国の代わりにユーロ圏にいる場合に機能します。

+0

ありがとう、私はそのようなものを探していた!私はgetCurrencyInstance()メソッドについて知らなかった。 – denchr

11

するかどう両方のゼロはそれはおそらく、String.Formatの(...)で行うことができますが、あなたはDecimalFormatを使用することができます。

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

あなたが試してみました:

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

これはトリックです。

+0

私の答えはあなたが要求したものを達成しましたが、他の人が指摘したように、よりよい解決法は 'BigDecimal'や真のMoneyクラスを使うことです。 – dustmachine

14

他の回答は完全に有効ですが(特にダフィモのもの)、ディスプレイのフォーマットよりもはるかに大きな問題があります。あなたは実際に離散値である金額に間違ったタイプを使用しています。 doubleの代わりに、java.lang.BigDecimalの使用を検討する必要があります。

(EDIT:...またはduffymoも実装マネークラスはJScienceのmonetaryモジュールまたはより最近のJoda-Moneyの例クラスの、コメントで指摘 - まだ持って正式版としてリリースされる。)

+0

+1 - 優秀な点。 BigDecimalまたは適切なMoneyクラス。 – duffymo

+0

提案していただきありがとうございます。ポイントは撮影:) – denchr

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; 
    } 
関連する問題