2017-03-12 8 views
4

Javaで小数点以下の桁数の倍数をフォーマットしたいとします。私のコードは、現在、次のようになります。NumberFormatは小数点以下340桁を好きではありません

final NumberFormat format = NumberFormat.getInstance(); 
    format.setMinimumFractionDigits(decimalPlaces); 
    format.setMaximumFractionDigits(decimalPlaces); 
    format.setGroupingUsed(false); 
    String s = format.format(value); 

しかしdecimalPlacesが340以上であるとき、この方法は、ちょうど340個の数字を印刷し、残りを無視します。この制限を回避する方法はありますか?

具体的にはすべて0です(精度はそれほど高くないので、特定のポイントの後の任意の数字になる可能性があります)が、私には間違っていると思われます。例外や何かを投げている。

はい、実際には2桁で小数点以下の桁数を保持することはできませんが、小数点以下の桁数を保持することはできません。

+0

は、あなたがこの割り当てにある「decimalPlaces」 –

+0

のためのあなたが持っている価値あるものを含めることができます。BigDecimal

は、このサンプルコードを試してみてくださいとして使用/値を宣言します。単純なコマンドライン計算機を作成しなければならず、テストの1つでは、小数点以下500桁(すべてゼロ)で出力される0の結果があります。このメソッドは340でそれらを切り捨て、エラーを表示しません。 – Neme

+0

私は自分たちの印刷機能を作ってはならないと確信しています。 – Neme

答えて

3

setMinimumFractionDigitsのドキュメントは、このステートメントを含む:

具象サブクラスがフォーマットされている数値型に適切なこの値に上限を適用してもよいです。

ほとんどのNumberFormat.getInstanceによって返されたサブクラスはBigIntegerのとのBigDecimalオブジェクト以外の数値をフォーマットするためにJavaDocs

で教えてくれるDecimalFormat、ある、newValueにの下限と340が使用されています。負の入力値は0に置き換えられます。

したがって、問題を解決するには、数値をBigDecimalに変換してからフォーマットしてください。

+0

これはドキュメントにありますが、これを行うための簡単な方法はありませんか? – Neme

+1

私はそれがかなりシンプルだと思う - それは比較的合理的な制限です。そのような精度で数値を表すことができるデータ型を使用しない場合は、小数点以下桁数を印刷する必要はほとんどありません。 – Hulk

+0

これは単純ですが、かなり無駄なリソースです。これは、まだクラスについて学んでいない時代からの宿題です。私たちはprintfや何かでそれをするはずだと思うけど、printfの文字列に数字を書いてそれをもう一度解析するのはさらに悪いようです。 – Neme

0

倍の場合、値は切り捨てられています。

final NumberFormat format = NumberFormat.getInstance(); 
    format.setMinimumFractionDigits(355); 
    format.setMaximumFractionDigits(400); 
    format.setGroupingUsed(false); 
    System.out.println(format.getMinimumFractionDigits()); 
    BigDecimal bd=new BigDecimal(10L); 
    String s = format.format(bd); 
    System.out.println(s.length()); 
    System.out.println(s); 
関連する問題