Float Fonksiyonları
Nette\Utils\Floats float sayıları karşılaştırmak için kullanışlı fonksiyonlara sahip statik bir sınıftır.
Kurulum:
Tüm örnekler aşağıdaki sınıf takma adının tanımlandığını varsayar:
Motivasyon
Float karşılaştırma sınıfının ne işe yaradığını merak ediyor musunuz? Operatörleri kullanabilirsiniz
<
, >
, ===
, diye düşünüyorsunuz. Bu tamamen doğru değil. Sizce bu kodu ne
yazdıracak?
Kodu çalıştırırsanız, bazılarınız programın not same
adresini yazdırmasına şaşıracaktır.
Float sayılarla yapılan matematiksel işlemler, ondalık ve ikili sistemler arasındaki dönüşüm nedeniyle hatalara neden
olur. Örneğin 0.1 + 0.2
eşittir 0.300000000000000044…
. Bu nedenle, kayan sayıları
karşılaştırırken, belirli bir ondalık basamaktan küçük bir farkı tolere etmeliyiz.
Ve Floats
sınıfının yaptığı da budur. Aşağıdaki karşılaştırma beklendiği gibi çalışacaktır:
NAN
adresini karşılaştırmaya çalışırken \LogicException
istisnası atar.
Floats
sınıfı 1e-10
'dan daha az farkları tolere eder. Daha fazla hassasiyetle
çalışmanız gerekiyorsa, bunun yerine BCMath kütüphanesini kullanın.
Şamandıra Karşılaştırması
areEqual(float $a, float $b): bool
$a
= $b
ise true
döndürür.
isLessThan(float $a, float $b): bool
$a
< $b
ise true
döndürür.
isLessThanOrEqualTo(float $a, float $b): bool
$a
<= $b
ise true
döndürür.
isGreaterThan(float $a, float $b): bool
$a
> $b
ise true
döndürür.
isGreaterThanOrEqualTo(float $a, float $b): bool
$a
>= $b
ise true
döndürür.
compare(float $a, float $b): int
$a
< $b
ise -1
döndürür, eşitlerse 0
and if $a
>
$b
1
döndürür.
Örneğin usort
işleviyle birlikte kullanılabilir.
Yardımcı Fonksiyonlar
isZero(float $value): bool
Değer sıfırsa true
döndürür.
isInteger(float $value): bool
Değer tamsayı ise true
döndürür.