Nette Documentation Preview

syntax
Float'larla Çalışma
*******************

.[perex]
[api:Nette\Utils\Floats], ondalık sayıları karşılaştırmak için yararlı fonksiyonlar içeren statik bir sınıftır.


Kurulum:

```shell
composer require nette/utils
```

Tüm örnekler, oluşturulmuş bir takma ad varsayar:

```php
use Nette\Utils\Floats;
```


Motivasyon
==========

Float'ları karşılaştırmak için neden bir sınıfa ihtiyacım var diye düşünüyor olabilirsiniz? Sonuçta `<`, `>`, `===` operatörlerini kullanabilirim ve işim biter. Bu tam olarak doğru değil. Sizce bu kod ne yazdırır?

```php
$a = 0.1 + 0.2;
$b = 0.3;
echo $a === $b ? 'aynı' : 'aynı değil'; // same -> aynı, not same -> aynı değil
```

Kodu çalıştırırsanız, bazılarınız programın `aynı değil` yazdırmasına kesinlikle şaşıracaktır.

Ondalık sayılarla yapılan matematiksel işlemlerde, onluk ve ikilik sistemler arasındaki dönüşüm nedeniyle hatalar oluşur. Örneğin, `0.1 + 0.2` sonucu `0.300000000000000044…` olur. Bu nedenle, karşılaştırma yaparken belirli bir ondalık basamaktan sonra küçük bir farkı tolere etmemiz gerekir.

Ve işte `Floats` sınıfı tam olarak bunu yapar. Aşağıdaki karşılaştırma artık beklendiği gibi çalışacaktır:

```php
echo Floats::areEqual($a, $b) ? 'aynı' : 'aynı değil'; // aynı
```

`NAN` karşılaştırmaya çalışıldığında `\LogicException` istisnası fırlatır.

.[tip]
`Floats` sınıfı `1e-10`'dan küçük farkları tolere eder. Daha yüksek hassasiyetle çalışmanız gerekiyorsa, bunun yerine BCMath kütüphanesini kullanın.


Float Karşılaştırması
=====================


areEqual(float $a, float $b): bool .[method]
--------------------------------------------

Eğer `$a` = `$b` ise `true` döndürür.

```php
Floats::areEqual(10, 10.0); // true
```


isLessThan(float $a, float $b): bool .[method]
----------------------------------------------

Eğer `$a` < `$b` ise `true` döndürür.

```php
Floats::isLessThan(9.5, 10.2); // true
Floats::isLessThan(INF, 10.2); // false
```


isLessThanOrEqualTo(float $a, float $b): bool .[method]
-------------------------------------------------------

Eğer `$a` <= `$b` ise `true` döndürür.

```php
Floats::isLessThanOrEqualTo(9.5, 10.2);    // true
Floats::isLessThanOrEqualTo(10.25, 10.25); // true
```


isGreaterThan(float $a, float $b): bool .[method]
-------------------------------------------------

Eğer `$a` > `$b` ise `true` döndürür.

```php
Floats::isGreaterThan(9.5, -10.2); // true
Floats::isGreaterThan(9.5, 10.2);  // false
```


isGreaterThanOrEqualTo(float $a, float $b): bool .[method]
----------------------------------------------------------

Eğer `$a` >= `$b` ise `true` döndürür.

```php
Floats::isGreaterThanOrEqualTo(9.5, 10.2);  // false
Floats::isGreaterThanOrEqualTo(10.2, 10.2); // true
```


compare(float $a, float $b): int .[method]
------------------------------------------

Eğer `$a` < `$b` ise `-1`, eğer eşitlerse `0` ve eğer `$a` > `$b` ise `1` döndürür.

Örneğin `usort` fonksiyonu ile kullanılabilir.

```php
$arr = [1, 5, 2, -3.5];
usort($arr, [Floats::class, 'compare']);
// $arr şimdi [-3.5, 1, 2, 5]
```


Yardımcı Fonksiyonlar
=====================


isZero(float $value): bool .[method]
------------------------------------

Değer sıfıra eşitse `true` döndürür.

```php
Floats::isZero(0.0); // true
Floats::isZero(0);   // true
```


isInteger(float $value): bool .[method]
---------------------------------------

Değer bir tamsayı ise `true` döndürür.

```php
Floats::isInteger(0);    // true
Floats::isInteger(0.0);  // true
Floats::isInteger(-5.0); // true

Floats::isInteger(-5.1); // false
Floats::isInteger(INF);  // false
Floats::isInteger(NAN);  // false
```

Float'larla Çalışma

Nette\Utils\Floats, ondalık sayıları karşılaştırmak için yararlı fonksiyonlar içeren statik bir sınıftır.

Kurulum:

composer require nette/utils

Tüm örnekler, oluşturulmuş bir takma ad varsayar:

use Nette\Utils\Floats;

Motivasyon

Float'ları karşılaştırmak için neden bir sınıfa ihtiyacım var diye düşünüyor olabilirsiniz? Sonuçta <, >, === operatörlerini kullanabilirim ve işim biter. Bu tam olarak doğru değil. Sizce bu kod ne yazdırır?

$a = 0.1 + 0.2;
$b = 0.3;
echo $a === $b ? 'aynı' : 'aynı değil'; // same -> aynı, not same -> aynı değil

Kodu çalıştırırsanız, bazılarınız programın aynı değil yazdırmasına kesinlikle şaşıracaktır.

Ondalık sayılarla yapılan matematiksel işlemlerde, onluk ve ikilik sistemler arasındaki dönüşüm nedeniyle hatalar oluşur. Örneğin, 0.1 + 0.2 sonucu 0.300000000000000044… olur. Bu nedenle, karşılaştırma yaparken belirli bir ondalık basamaktan sonra küçük bir farkı tolere etmemiz gerekir.

Ve işte Floats sınıfı tam olarak bunu yapar. Aşağıdaki karşılaştırma artık beklendiği gibi çalışacaktır:

echo Floats::areEqual($a, $b) ? 'aynı' : 'aynı değil'; // aynı

NAN karşılaştırmaya çalışıldığında \LogicException istisnası fırlatır.

Floats sınıfı 1e-10'dan küçük farkları tolere eder. Daha yüksek hassasiyetle çalışmanız gerekiyorsa, bunun yerine BCMath kütüphanesini kullanın.

Float Karşılaştırması

areEqual(float $a, float $b)bool

Eğer $a = $b ise true döndürür.

Floats::areEqual(10, 10.0); // true

isLessThan(float $a, float $b)bool

Eğer $a < $b ise true döndürür.

Floats::isLessThan(9.5, 10.2); // true
Floats::isLessThan(INF, 10.2); // false

isLessThanOrEqualTo(float $a, float $b)bool

Eğer $a <= $b ise true döndürür.

Floats::isLessThanOrEqualTo(9.5, 10.2);    // true
Floats::isLessThanOrEqualTo(10.25, 10.25); // true

isGreaterThan(float $a, float $b)bool

Eğer $a > $b ise true döndürür.

Floats::isGreaterThan(9.5, -10.2); // true
Floats::isGreaterThan(9.5, 10.2);  // false

isGreaterThanOrEqualTo(float $a, float $b)bool

Eğer $a >= $b ise true döndürür.

Floats::isGreaterThanOrEqualTo(9.5, 10.2);  // false
Floats::isGreaterThanOrEqualTo(10.2, 10.2); // true

compare(float $a, float $b)int

Eğer $a < $b ise -1, eğer eşitlerse 0 ve eğer $a > $b ise 1 döndürür.

Örneğin usort fonksiyonu ile kullanılabilir.

$arr = [1, 5, 2, -3.5];
usort($arr, [Floats::class, 'compare']);
// $arr şimdi [-3.5, 1, 2, 5]

Yardımcı Fonksiyonlar

isZero(float $value): bool

Değer sıfıra eşitse true döndürür.

Floats::isZero(0.0); // true
Floats::isZero(0);   // true

isInteger(float $value): bool

Değer bir tamsayı ise true döndürür.

Floats::isInteger(0);    // true
Floats::isInteger(0.0);  // true
Floats::isInteger(-5.0); // true

Floats::isInteger(-5.1); // false
Floats::isInteger(INF);  // false
Floats::isInteger(NAN);  // false