2016-09-23 3 views
-1

私は以下のプログラムを見て驚いています。これはあくまでも小数点以下を前にしてpoitnを使用しています。 progrmamダブルデータ型の場合、いくつかのmunbersの小数点精度は失われます

double fixedRate = 0.997500000000; //**output --->0.9975 
    // BigDecimal fixedRate = new BigDecimal("0.997500000000");   
     double fixedRate1 = 0.123456789; 

     System.out.println(fixedRate); 
     System.out.println(fixedRate1); 

と出力が

0.9975 
0.123456789

では現在、最初の出力に含まのためにアドバイスしてください0.9975ですが、終盤に次のことが小数点の後に切り捨てされていませんが、なぜ最初に、その後のために。

+0

は、数値をフォーマットする方法についてのチュートリアルを見てくださいhttps://docs.oracle.com/javase/tutorial/java/data:あなたが値をフォーマットしたい場合、あなたはこの質問を見ることができます

/numberformat.html – Kennet

+0

これは別のものではありません私は同意しますありがとうございました – user1508454

+1

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html完全に理解するまで読んで再度読む – jwenting

答えて

0
This is a printing problem.Please use this format to print your values and tell me the result: 

double fixedRate = 0.997500000000; 
double fixedRate1 = 0.123456789; 

System.out.println(String.format("%.19f", fixedRate)); 
System.out.println(String.format("%.19f", fixedRate1)); 

Good Luck ! 
+0

まだありません出力が動作しない1.00、 0.12 – user1508454

+0

@ user1508454 ..これを使用してください: System.out.println(String.format( "%。19f"、fixedRate)); System.out.println(String.format( "%。19f"、fixedRate1)); –

+0

@ user1508454 ..欲しいところにデシリアルの場所を設定する必要があります。例:%。2f、%3.f、%4.f、あなたの場合は%19.fだと思います。 –

0

精度がを失っていないです。印刷された値と他の2倍の値とを区別するために、より多くの数字を必要としないので、印刷されません。

あなたはSystem.out.printf()またはString.Formatの(を見て、小数の桁の一定数を強制したいならば)

詳細および可能なフォーマットについては、https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.htmlを参照してください。

結果は次のようになります。

  System.out.printf("%.19f%n",fixedRate); 
      System.out.printf("%.19f%n", fixedRate1); 
0

は、あなたの質問

によれば、第1のために出力に含まは0.9975ですが、終盤に次のことが は、小数点の後に切り捨てしかし、なぜされていません最初の場合

doubleは数値データ型であるため、先頭とt手すりゼロ。

doubleは書式設定を気にしません。これはストレージに関するものです。印刷すると、文字列に変換されます(Doubleの静的toStringメソッドを使用)。

簡潔に言えば、値0.99750.997500000000と異ならず、数字の後にはゼロと同じ0.997500000000と同じです。

しかし、この値が0.9975000000001の場合、すべての数値が印刷されると考えてください。それを確認してくださいhereHow to properly display a price up to two decimals (cents) including trailing zeros in Java?

関連する問題