Nette Documentation Preview

syntax
Λειτουργίες Floats
******************

.[perex]
[api:Nette\Utils\Floats] είναι μια στατική κλάση με χρήσιμες συναρτήσεις για τη σύγκριση αριθμών float.


Εγκατάσταση:

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

Όλα τα παραδείγματα προϋποθέτουν ότι έχει οριστεί το ακόλουθο ψευδώνυμο κλάσης:

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


Κίνητρο .[#toc-motivation]
==========================

Αναρωτιέστε για ποιο λόγο υπάρχει μια κλάση σύγκρισης float; Μπορείτε να χρησιμοποιήσετε τους τελεστές `<`, `>`, `===`, νομίζετε.
Αυτό δεν είναι απολύτως αληθές. Τι νομίζετε ότι θα εκτυπώσει αυτός ο κώδικας;

```php
$a = 0.1 + 0.2;
$b = 0.3;
echo $a === $b ? 'same' : 'not same';
```

Αν εκτελέσετε τον κώδικα, κάποιοι από εσάς θα εκπλαγείτε από το γεγονός ότι το πρόγραμμα εκτύπωσε το `not same`.

Οι μαθηματικές πράξεις με αριθμούς float προκαλούν σφάλματα λόγω της μετατροπής μεταξύ δεκαδικού και δυαδικού συστήματος. Για παράδειγμα, το `0.1 + 0.2` ισούται με το `0.300000000000000044…`. Επομένως, όταν συγκρίνουμε κινητές μονάδες, πρέπει να ανεχόμαστε μια μικρή διαφορά από ένα ορισμένο δεκαδικό ψηφίο.

Και αυτό ακριβώς κάνει η κλάση `Floats`. Η ακόλουθη σύγκριση θα λειτουργήσει όπως αναμένεται:

```php
echo Floats::areEqual($a, $b) ? 'same': 'not same'; // ίδιο
```

Όταν προσπαθεί να συγκρίνει το `NAN`, πετάει μια εξαίρεση `\LogicException`.

.[tip]
Η κλάση `Floats` ανέχεται διαφορές μικρότερες από `1e-10`. Αν θέλετε να εργαστείτε με μεγαλύτερη ακρίβεια, χρησιμοποιήστε τη βιβλιοθήκη BCMath.


Σύγκριση float .[#toc-float-comparison]
=======================================


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

Επιστρέφει `true` εάν `$a` = `$b`.

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


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

Επιστρέφει `true` εάν `$a` < `$b`.

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


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

Επιστρέφει `true` εάν `$a` <= `$b`.

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


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

Επιστρέφει `true` εάν `$a` > `$b`.

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


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

Επιστρέφει `true` εάν `$a` >= `$b`.

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


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

Αν `$a` < `$b`, επιστρέφει `-1`, αν είναι ίσα επιστρέφει `0` and if `$a` > `$b` επιστρέφει `1`.

Μπορεί να χρησιμοποιηθεί, για παράδειγμα, με τη συνάρτηση `usort`.

```php
$arr = [1, 5, 2, -3.5];
usort($arr, [Float::class, 'compare']);
// $arr είναι [-3.5, 1, 2, 5]
```


Συναρτήσεις βοήθειας .[#toc-helpers-functions]
==============================================


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

Επιστρέφει `true` αν η τιμή είναι μηδέν.

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


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

Επιστρέφει `true` εάν η τιμή είναι ακέραιος αριθμός.

```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
```

Λειτουργίες Floats

Nette\Utils\Floats είναι μια στατική κλάση με χρήσιμες συναρτήσεις για τη σύγκριση αριθμών float.

Εγκατάσταση:

composer require nette/utils

Όλα τα παραδείγματα προϋποθέτουν ότι έχει οριστεί το ακόλουθο ψευδώνυμο κλάσης:

use Nette\Utils\Floats;

Κίνητρο

Αναρωτιέστε για ποιο λόγο υπάρχει μια κλάση σύγκρισης float; Μπορείτε να χρησιμοποιήσετε τους τελεστές <, >, ===, νομίζετε. Αυτό δεν είναι απολύτως αληθές. Τι νομίζετε ότι θα εκτυπώσει αυτός ο κώδικας;

$a = 0.1 + 0.2;
$b = 0.3;
echo $a === $b ? 'same' : 'not same';

Αν εκτελέσετε τον κώδικα, κάποιοι από εσάς θα εκπλαγείτε από το γεγονός ότι το πρόγραμμα εκτύπωσε το not same.

Οι μαθηματικές πράξεις με αριθμούς float προκαλούν σφάλματα λόγω της μετατροπής μεταξύ δεκαδικού και δυαδικού συστήματος. Για παράδειγμα, το 0.1 + 0.2 ισούται με το 0.300000000000000044…. Επομένως, όταν συγκρίνουμε κινητές μονάδες, πρέπει να ανεχόμαστε μια μικρή διαφορά από ένα ορισμένο δεκαδικό ψηφίο.

Και αυτό ακριβώς κάνει η κλάση Floats. Η ακόλουθη σύγκριση θα λειτουργήσει όπως αναμένεται:

echo Floats::areEqual($a, $b) ? 'same': 'not same'; // ίδιο

Όταν προσπαθεί να συγκρίνει το NAN, πετάει μια εξαίρεση \LogicException.

Η κλάση Floats ανέχεται διαφορές μικρότερες από 1e-10. Αν θέλετε να εργαστείτε με μεγαλύτερη ακρίβεια, χρησιμοποιήστε τη βιβλιοθήκη BCMath.

Σύγκριση float

areEqual(float $a, float $b)bool

Επιστρέφει true εάν $a = $b.

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

isLessThan(float $a, float $b)bool

Επιστρέφει true εάν $a < $b.

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

isLessThanOrEqualTo(float $a, float $b)bool

Επιστρέφει true εάν $a <= $b.

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

isGreaterThan(float $a, float $b)bool

Επιστρέφει true εάν $a > $b.

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

isGreaterThanOrEqualTo(float $a, float $b)bool

Επιστρέφει true εάν $a >= $b.

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

compare(float $a, float $b)int

Αν $a < $b, επιστρέφει -1, αν είναι ίσα επιστρέφει 0 and if $a > $b επιστρέφει 1.

Μπορεί να χρησιμοποιηθεί, για παράδειγμα, με τη συνάρτηση usort.

$arr = [1, 5, 2, -3.5];
usort($arr, [Float::class, 'compare']);
// $arr είναι [-3.5, 1, 2, 5]

Συναρτήσεις βοήθειας

isZero(float $value): bool

Επιστρέφει true αν η τιμή είναι μηδέν.

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

isInteger(float $value): bool

Επιστρέφει true εάν η τιμή είναι ακέραιος αριθμός.

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