[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