[gl-como] quesito php
~redShadow~
redshadow@hackzine.org
Mer 30 Maggio 2012 03:10:06 CEST
On Tue, 2012-05-29 at 16:13 +0200, Federico Zappa wrote:
> allora scrivo questo scrippettino in php
>
>
> $float_1 = 72.99;
> $float_2 = ($float_1*100);
> $int = (int)$float_2;
> var_dump($float_1,$float_2,$int);
>
>
> e il rusultato che vedo in console è questo:
>
> float(72.99)
> float(7299)
> int(7298)
>
> notare il 7298 al posto del 7299 nel campo int che mi aspettavo...
> qualcuno sa dirmi perchè??
>
> ps
> prego astenersi troll (al massimo aprite un altro tread)
Tranquillo, non é "colpa" di php (stranamente.. :P)
Invece, deriva dall'impossibilitá di rappresentare certi float, che
vengono quindi approssimati.
Ad esempio, in Python:
>>> float_1 = 72.99
>>> float_2 = float_1 * 100
>>> myint = int(float_2)
>>> float_1, float_2, myint
(72.989999999999995, 7298.9999999999991, 7298)
In rete c'é un sacco di materiale a riguardo, tra cui qui:
http://en.wikipedia.org/wiki/Floating-point
Spesso, nel caso ci sia necessitá di rappresentare quantitá discrete
(es. somme di denaro), si usano interi rappresentanti l'unitá minima, e
si effettua la conversione solo quando c'é da mostrare i valori
all'utente. (Es, anziché 72.99€, passi in giro 7299¢, e solo alla fine
li converti in € con un /100).
Comunque, basta arrotondare usando round(), al posto di usare il cast
secco a int che effettua un'operazione di floor (arrotondamento per
difetto), e il risultato cambia:
$float_1 = 72.99;
$float_2 = ($float_1*100);
$int = (int)$float_2;
$int2 = round($float_2);
var_dump($float_1,$float_2,$int,$int2);
Scrive:
float(72.99)
float(7299)
int(7298)
float(7299)
(ecco, qui mi chiedo perché var_dump() mostra i valori arrotondati, al
posto dei valori "reali" come fa invece Python..)
--
Samuele ~redShadow~ Santi
----------------------------------------------------------------
redshadow[at]hackzine.org
Blog: http://hackzine.org
GPG Key signature:
050D 3E9F 6E0B 44CE C008 D1FC 166C 3C7E EB26 4933
----------------------------------------------------------------
/me recommends:
Squadra Informatica - http://www.squadrainformatica.com
----------------------------------------------------------------
- Proud ThinkPad T-Series owner
- Registered Linux-User: #440008
* GENTOO User since 1199142000 (2008-01-01)
* former DEBIAN SID user
----------------------------------------------------------------
"Software is like sex: it's better when it's free!"
-- Linus Torvalds
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome: non disponibile
Tipo: application/pgp-signature
Dimensione: 490 bytes
Descrizione: This is a digitally signed message part
URL: <http://lists.linux.it/pipermail/gl-como/attachments/20120530/d955c703/attachment-0001.pgp>
Maggiori informazioni sulla lista
gl-como