Ondalık ile PHP ve birim test iddialar

3 Cevap php

Ben 1.234567890.I gerçekten öyle yapar sınamak istediğiniz gibi bir float döndüren bir yöntem var. Ancak, bu kadar nasıl döndürülen değer 1.23456789 olduğunu iddia ederim, bu iade şamandıra farklı platformlarda farklı hassasiyete sahiptir görünüyor? Ben sadece yaparsanız:

$this->assertEqual(1.23456789, $float);

Sonra yeterince hassas olmadığı bazı platformlarda başarısız olabilir.

3 Cevap

Daha fazla doğruluk için, BCMath kullanmayı düşünebilirsiniz.

Genel olarak, bu eşitlik için yerleşik yüzer test etmek kötü bir fikir. Çünkü accuracy problems kayan nokta gösterimine arasında size PHP zamanında bunları karşılaştırmak, iki farklı hesaplamaların sonuçları matematiksel olarak tamamen eşit olabilir, ama farklı olabilir.

Çözüm 1: Onlar ne kadar ayrı karşılaştırın. Mutlak farkı az 0.000001 ise, eşit değerleri tedavi söylüyorlar.

Çözüm 2: kullanım arbitrary precision mathematics, dizeleri olarak temsil herhangi bir boyut ve hassasiyet numaraları, destekler.

Alternatif BCMath kullanarak () sen de böyle, varsayılan duyarlık ayarlayabilirsiniz:

ini_set('precision', 14);