2016-06-06 48 views
5

DecimalFormat numaranın bir BigDecimal numarasının ve diğer makinede yuvarlandığı durumu analiz ediyordum.DecimalFormat, farklı makinelerde iki farklı sonuçla sonuçlanır

İki makinedeki tüm yapılandırmaları doğruladım (ve hepsinin aynı olduğunu varsayalım). Sadece fark ettiğim fark JDK sürümüdür.

Makine 1, JDK1.6 üzerinde çalışıyor. Ancak, 1 Makine üzerinde JDK1.7 ile aynı denedim, JDK1.6 ile aynı şekilde çalışıyor.

Makine 1 Sonuç olarak
DecimalFormat decimalFormat = new DecimalFormat("#,###.00"); 
BigDecimal anObject = new BigDecimal("3.8880"); 
String str = decimalFormat.format(((Number)anObject).doubleValue()); 
System.out.println(str); 

geçerli:: Makine 2 sonuç üzerinde 3.39

geçerli: 3,38

+2

Sayı 3.8880'in 3.38 veya 3.39'a nasıl yuvarlanabileceğini veya kesileceğini anlamıyorum. 3.88/3.89 mu demek istiyorsun? Yoksa testi doğru yapmadın mı? –

+0

"java -version" komut isteminde çalıştırmayı deneyin. Belki sadece bir JVM hatası. – Aris2World

cevap

6

Makine 2 takiben JDK1.7

çalışıyorsa kod parçacığı olduğunu

JDK7'de DecimalFormat tarihinde bir hata oluştu. Daha fazla bilgi için bu soruya bakın: Is inconsistency in rounding between Java 7 and Java 8 a bug?

+0

Teşekkürler Arnaud, oracle sitesinde de kontrol ettim ve aynı hataların da orada bulunduğunu gördüm. Bu referansı kontrol edin [Oracle'daki Hata] (https://bugs.openjdk.java.net/browse/JDK-8039915) sitesi –