2011-09-14 15 views
27

ColdFusion'da matematik işlemleri neden kayan nokta matematik sorunlarından etkilenmiyor? equivlant Java kodu iki çift eklerken "beklemek d neyi üretir AncakColdFusion'da neden 0,06 + 0,01 = 0,07 oluyor?

result = 0.06 + 0.01; 

writedump(result); 
writedump(result.getClass().getName()); 

0,07

java.lang.Double

verir: kodunu alın :

public static void main(String[] args) { 
    double a = 0.01d; 
    double b = 0.06d; 

    System.out.println(a + b); //0.06999999999999999 
} 

Bu, ColdFusion'dan yüzen matematiğin gerçekleri nedeniyle görmeyi beklediğim şeydir (http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html).

ColdFusion sahnelerin ardında "büyü" yapar mı yoksa izole bir anormalliğe mi bakıyorum?

+0

Her şey google, CF hakkında özel bir şey olmadığını ve beklediğiniz sonuçları ürettiğini söylüyor (ve insanlar neden soruyorlar, çünkü onlar neden kayan nokta kesinliğini anlamadılar). CF kodunuzda başka hiçbir şey olmadığından emin misiniz? –

+0

Evet, bu parçacık öyle. Ne olacağını görmek için en basit senaryoları yarattım. Bu kodu bir adım daha ileri götürüp "a = 0.01; b = 0.06; writedump (a.getClass(). getName(); 'Bir String alıyorum.Gerçek olarak sahnelerin arkasından ima edilen bir dönüşüm var. – bittersweetryan

+2

CF, çoğu değeri başlangıçta dizge olarak kaydediyor. vsetera) '+ 'gibi bir matematiksel operatör uygulandığında olduğu gibi: http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09af4-7fc3.html – Leigh

cevap

35

Sadece çıktı çıkışında farklı şekilde yuvarlama olduğundan şüpheleniyorum. Başka bir deyişle, sorun hala var - bu özel değer writedump ile yazdırıldığında görünmüyor.

Ne kullandın ne olur:

writedump(String.valueOf(result)); 

?

+0

Yani, dize değeri dumping .69999999999999; – bittersweetryan

+3

'writedump' ve' cfdump' bir çok biçimlendirme yapmak - bu karmaşık nesneleri çok kolay bir şekilde görüntülemeyi kolaylaştırır ama Aynı zamanda bu gibi durumlarda bazı belirsizlikleri de beraberinde getirmektedir: – Antony

+0

@Antony - Evet, örtük olarak güvenmediğini öğrendim. – Leigh

İlgili konular