Ehm.. no, non è che funziona, anzi.. così tronca il 3° decimale, non fà l'arrotondamento...Originariamente inviato da filippo.toso
A me funzionano perfettamente ...
Codice PHP:
<?php
$a = '0.715';
for ($i = 0; $i < 1000; $i++) {
echo(bcadd($i, $a, 2) . '
');
}
?>
A me serve che faccia l'arrotondamento (e tutto il problema nasce forse da qui)
Cioè X.715 deve diventare X.72, sempre e comunque.
Invece number_format() mi esegue l'arrotondamento in eccesso (come sia giusto che sia, visto che l'ultima cifra è 5) per numeri < 256, in difetto per numeri > 256.
Poi facendo dei test torna a essere in eccesso sopra il 326 mi pare, e così via..
Guarda l'output del tuo codice usando number_format (ho messo scale=3 perchè non voglio il troncamento ma l'arrotondamento):
Se noti, da 256 a 326 restituisce X.71, invece per tutti gli altri numeri X.72Codice PHP:
<?php
$a = 0.715;
for ($i = 0; $i < 1000; $i++) {
$k = bcadd($i, $a, 2);
echo number_format($k, 2) . '
';
}
?>
Ho anche provato a farlo ciclare fino a 10000, il 'problema' sembra essere solo nella fascia 256-326.
Se invece di 0.715 utilizziamo 0.716, il problema non si pone, arrotonda sempre in eccesso...
A questo punto, mi sembra di aver capito che il punto della questione è number_format(), e non la somma o il float (nell'esempio da te postato, togliento bcadd e mettendo la somma normale +, l'output è lo stesso)