Thread Auf 2. Kommastelle runden? (31 answers)
Opened by Gast at 2008-05-07 02:31

renee
 2008-05-09 13:06
#109481 #109481
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
tecker+2008-05-09 10:52:03--
ganz schön umständlich nur für das runden auf 2 Kommastellen. Wo patzt denn die Variante von renee? Ich mache das genauso.


Wo sprintf "patzt" hat Dubu gezeigt. Das hängt aber damit zusammen, dass es beim Speichern von Dezimalzahlen zu Ungenauigkeiten kommt. Durch das %f in Dubus Format wird es leider nicht ganz deutlich. Hier kann man besser erkennen, dass sprintf schon richtig rundet, aber die Dezimalzahlen nicht korrekt gespeichert werden (können) und es somit zu einem falschen Endergebnis kommt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
C:\>perl -le "for ($i = 0; $i < 0.101; $i += 0.005) { printf qq~%.20f :  %.2f <=> %f\n~, $i, $i, int($i*100+0.5)/100};"
0.00000000000000000000 : 0.00 <=> 0.000000
0.00500000000000000010 : 0.01 <=> 0.010000
0.01000000000000000000 : 0.01 <=> 0.010000
0.01499999999999999900 : 0.01 <=> 0.020000
0.02000000000000000000 : 0.02 <=> 0.020000
0.02500000000000000100 : 0.03 <=> 0.030000
0.03000000000000000200 : 0.03 <=> 0.030000
0.03500000000000000300 : 0.04 <=> 0.040000
0.04000000000000000100 : 0.04 <=> 0.040000
0.04499999999999999800 : 0.04 <=> 0.050000
0.04999999999999999600 : 0.05 <=> 0.050000
0.05499999999999999300 : 0.05 <=> 0.050000
0.05999999999999999100 : 0.06 <=> 0.060000
0.06499999999999998800 : 0.06 <=> 0.060000
0.06999999999999999300 : 0.07 <=> 0.070000
0.07499999999999999700 : 0.07 <=> 0.080000
0.08000000000000000200 : 0.08 <=> 0.080000
0.08500000000000000600 : 0.09 <=> 0.090000
0.09000000000000001100 : 0.09 <=> 0.090000
0.09500000000000001500 : 0.10 <=> 0.100000
0.10000000000000002000 : 0.10 <=> 0.100000
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread Auf 2. Kommastelle runden?