2017-04-07 4 views
-1

フォーマット番号に関連するスレッド数を確認しました。 ほとんどの場合、値3.101以外は機能します。 FloatとDoubleが##と00の形式で使用されています。Java - 10進形式浮動小数点または小数点を返すときに精度が失われる

import java.text.DecimalFormat; 

public class DecimalFormatTest { 
public static void main(String[] args) 
{ 
    Float d1 = -3.1011f; 
    Double ds = -3.1011; 
    DecimalFormat df = new DecimalFormat("#.##"); 
    System.out.println (Double.valueOf(df.format(d1))); 
    System.out.println (Double.valueOf(df.format(ds))); 

    DecimalFormat df2 = new DecimalFormat("#.00"); 
    System.out.println (Double.valueOf(df2.format(d1))); 
    System.out.println (Double.valueOf(df2.format(ds))); 
} 
} 

出力は次のようになります。

-3.1 
-3.1 
-3.1 
-3.1 

予想される出力:上記のように

-3.10 
-3.10 
-3.10 
-3.10 

が、これは私がテストしている他のすべての数字のために動作します。これは何らかの理由で問題を引き起こしています。

何がこの番号を非常に異なるものにするか、また2番目の数字を取得するために何が必要ですか?

キーは、私が最終的にフロートまたはダブルを返すことを覚えておいてください。

+0

可能な複製(http://stackoverflow.com/questions/5710394/how-do-i [どのように私はJavaで小数点以下2桁のダブルを丸めるのですか?] -round-a-double-to-two-decimal-places-in-java) – Omore

+0

私はあなたの質問が完全にはっきりしていません。 –

+1

'Double.valueOf'ビットを削除すると、よりうまく動作します。 – assylias

答えて

0

これは動作します:

Double number = 3.101; 
System.out.printf("%.2f", number); 
+0

ようこそ!このユーザーの問題を解決しているかもしれませんが、将来この問題に遭遇するユーザーにとってはコードオンリーの回答はあまり役に立ちません。あなたのコードが元の問題を解決する理由を説明するために、あなたの答えを編集してください。 –

3

はこれを試してみてください。

public static void main(String[] args) 
    { 
     Float d1 = -3.1011f; 
     Double ds = -3.1011; 
     DecimalFormat df = new DecimalFormat("0.00"); 
     System.out.println (df.format(d1)); 
     System.out.println (df.format(ds)); 

     DecimalFormat df2 = new DecimalFormat("0.00"); 
     System.out.println (df2.format(d1)); 
     System.out.println (df2.format(ds)); 
    } 
+0

ようこそスタックオーバーフロー!このユーザーの問題を解決しているかもしれませんが、将来この問題に遭遇するユーザーにとってはコードオンリーの回答はあまり役に立ちません。あなたのコードが元の問題を解決する理由を説明するために、あなたの答えを編集してください。 –

0

ここでの主な原因はDouble.valueOfです。それを削除してみてください、それは以下のようにうまくいくはずです: また、("#.##")を入れてさらに問題が発生します。だから、精度の後で少なくとも("0.00")を使用してください。参考のため

import java.text.DecimalFormat; 

public class DecimalFormatTest { 
public static void main(String[] args) 
    { 
     Float d1 = -3.1011f; 
     Double ds = -3.1011; 
     DecimalFormat df = new DecimalFormat("0.00"); 
     System.out.println (df.format(d1)); 
     System.out.println (df.format(ds)); 

     DecimalFormat df2 = new DecimalFormat("0.00"); 
     System.out.println (df2.format(d1)); 
     System.out.println (df2.format(ds)); 
    } 
} 

:のDouble decimal formatting in Java

+0

ありがとう、このシナリオで理にかなっていますが、Double.valueOfの使用は実際には文字列の代わりにDoubleが必要なためです。 –

+0

参照リンクを参照してください。 – dildeepak

+0

@Unhandled - しかし、表示の目的で二重データ型は必要ありません。ダブルデータ型は、必要がないので末尾のゼロを削除します。あなたは表示目的のために末尾のゼロだけを望むでしょう。 – DevilsHnd

関連する問題