Leser: 18
1
2
3
4
5
6
7
To see why, notice how you'll still have an issue on half-way-point
alternation:
for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
0.8 0.8 0.9 0.9 1.0 1.0
1
2
3
4
5
6
7
8
9
10
11
Rounding in financial applications can have serious implications, and the
rounding method used should be specified precisely. In these cases, it probably
pays not to trust whichever system rounding is being used by Perl, but to instead
implement the rounding function you need yourself.
To see why, notice how you'll still have an issue on half-way-point alternation:
for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
0.8 0.8 0.9 0.9 1.0 1.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
sub kfmrunden { my $dInput = shift ( @_ ) || 0; my $iStelle = shift ( @_ ) || 0; my $dErg = &integer( $dInput * (10**$iStelle) + 0.5 ) / ( 10**$iStelle); return $dErg; } sub integer { my $wert = shift ( @_ ) || 0; if ($wert =~ /\./) { my $neu = ''; for (my $st = 0; $st < length($wert); $st ++) { if (substr($wert,$st,1) eq '.') { last; } else { $neu .= substr($wert,$st,1); } } $neu = 0 if $neu eq ''; $wert = $neu; } return $wert; }
2009-11-23T08:34:49 Dubumal auf und mal ab ("alternation") gerundet wird.
2009-11-23T13:39:14 LanX-2009-11-23T08:34:49 Dubumal auf und mal ab ("alternation") gerundet wird.
Einspruch: was alterniert ist die letzte Kommastelle, und zwar zw. 1 und 6,
Quotedie Rundung hingegen ist ziemlich willkürlich.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ perl -le 'for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.20f\t%.1f \n",$i, $i}'
0.00000000000000000000 0.0
0.05000000000000000278 0.1
0.10000000000000000555 0.1
0.15000000000000002220 0.2
0.20000000000000001110 0.2
0.25000000000000000000 0.2
0.29999999999999998890 0.3
0.34999999999999997780 0.3
0.39999999999999996669 0.4
0.44999999999999995559 0.4
0.49999999999999994449 0.5
0.54999999999999993339 0.5
0.59999999999999997780 0.6
0.65000000000000002220 0.7
0.70000000000000006661 0.7
0.75000000000000011102 0.8
0.80000000000000015543 0.8
0.85000000000000019984 0.9
0.90000000000000024425 0.9
0.95000000000000028866 1.0
1.00000000000000022204 1.0
QuoteAlternieren ist mathematisch der strenge Wechsel zwischen zwo Zuständen ("Flip-Flop") und nicht ein willkürlicher wie bei der Rundung.
QuoteLaut Leo ist im englischen auch eine Halbphase damit gedacht.
http://dict.leo.org/?lp=ende&search=alternation
QuoteLetztendlich sollten wir uns lieber vom englischen Text lösen und das Phänomen lieber genau beschreiben.
QuoteJetzt könntest du natürlich sagen "die letzte Kommastelle alterniert zwischen 0 und 5", aber darum geht es ja nicht.