On Dec 19, 12:16 pm, capsula <___@___.___> wrote:
> Da qualche parte avevo letto che non
> c'è da fidarsi dell'approssimazione di base di perl e non mi fidavo
> troppo delle funzioni base.
Puoi fidarti ciecamente, o almeno quanto ti fidi delle funzioni
(s)printf della libreria C stdio con la quale è stato compilato il tuo
perl.
> ho fatto un bel po di prove e sembra funzionare il criterio base con l'euro.
> lo script mi serve per calcolare importi in euro che vanno sempre prima
> approssimati al centesimo prima di operare la successiva operazione,
> come farebbe un ragioniere passo dopo passo e non un matematico che
> arrotonda alla fine.
>
> c'è un modo per dichiarare una variabile sempre approssimata alla
> seconda cifra dopo ogni operazione senza scrivere l'istruzione
> successiva di arrotondamento ogni volta?
Certamente, con tie() puoi farlo diventare completamente trasparente:
use strict;
use warnings;
use v5.10;
package Euro;
sub TIESCALAR { bless \my $rounded_value, shift }
sub FETCH { ${ shift() } }
sub STORE {
my $self = shift;
$$self = sprintf '%.2f', shift
}
package main;
tie my $value, 'Euro';
# Ed ora ogni valore assegnato a $value verrà automagicamente
arrotondato
$value = 51.645689;
say $value; # 51.65
$value = 25.822844;
say $value; # 25.82
__END__
Riferimenti:
http://perldoc.perl.org/perltie.html
http://perldoc.perl.org/functions/tie.html
Altrimenti se sei disposto a sacrificare la trasparenza a favore di
una soluzione più immediata, puoi cavartela con una semplice
subroutine:
sub round_euro { sprintf '%.2f', shift }
Detto tutto questo, mi sento di consigliarti di seguire il metodo dei
matematici piuttosto che quello dei ragionieri.
Ma accetto che mi si risponda che non sono affari miei ;-)
Ciao.