Leser: 35
|< 1 2 3 4 >| | 32 Einträge, 4 Seiten |
1 2 3
my $lange_zahl = 1.45548765; my $kurze_zahl = sprintf "%.2f", $lange_zahl; print $kurze_zahl;
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 < 0.101; $i += 0.005) { printf "%f : %.2f <=> %f\n", $i, $i, int($i*100+0.5)/100};'
0.000000 : 0.00 <=> 0.000000
0.005000 : 0.01 <=> 0.010000
0.010000 : 0.01 <=> 0.010000
0.015000 : 0.01 <=> 0.020000
0.020000 : 0.02 <=> 0.020000
0.025000 : 0.03 <=> 0.030000
0.030000 : 0.03 <=> 0.030000
0.035000 : 0.04 <=> 0.040000
0.040000 : 0.04 <=> 0.040000
0.045000 : 0.04 <=> 0.050000
0.050000 : 0.05 <=> 0.050000
0.055000 : 0.05 <=> 0.050000
0.060000 : 0.06 <=> 0.060000
0.065000 : 0.06 <=> 0.060000
0.070000 : 0.07 <=> 0.070000
0.075000 : 0.07 <=> 0.080000
0.080000 : 0.08 <=> 0.080000
0.085000 : 0.09 <=> 0.090000
0.090000 : 0.09 <=> 0.090000
0.095000 : 0.10 <=> 0.100000
0.100000 : 0.10 <=> 0.100000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/usr/bin/perl use strict; use warnings; my $s=2; for (my $i = 0; $i <= (1/10**($s-1)); $i += (5/10**($s+1))) { printf("%.".($s+1)."f --> sprintf:%.$s"."f <> round:%s <> int:%.$s"."f\n", $i, $i, round($i,$s), int($i*(10**$s)+0.5)/(10**$s) ); } sub round { my $zahl=shift; my $stelle=shift; my $zz=$zahl+0; if($zz=~/^.+?\.\d{$stelle}/) { $zz=~s/^.+?\.\d{$stelle}/'0.'.('0'x$stelle)/e; $zahl+=$zz; $zahl=~s/^(.+?\.\d{$stelle}).*$/$1/; } $zahl=sprintf("%.$stelle"."f",$zahl); return $zahl; }
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.
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0.000 --> sprintf:0.00 <> round:0.00 <> int:0.00
0.005 --> sprintf:0.01 <> round:0.01 <> int:0.01
0.010 --> sprintf:0.01 <> round:0.01 <> int:0.01
0.015 --> sprintf:0.01 <> round:0.02 <> int:0.02 <-- Falsch bei sprintf
0.020 --> sprintf:0.02 <> round:0.02 <> int:0.02
0.025 --> sprintf:0.03 <> round:0.03 <> int:0.03
0.030 --> sprintf:0.03 <> round:0.03 <> int:0.03
0.035 --> sprintf:0.04 <> round:0.04 <> int:0.04
0.040 --> sprintf:0.04 <> round:0.04 <> int:0.04
0.045 --> sprintf:0.04 <> round:0.05 <> int:0.05 <-- Falsch bei sprintf
0.050 --> sprintf:0.05 <> round:0.05 <> int:0.05
0.055 --> sprintf:0.05 <> round:0.06 <> int:0.05 <-- Falsch bei sprintf und int
0.060 --> sprintf:0.06 <> round:0.06 <> int:0.06
0.065 --> sprintf:0.06 <> round:0.07 <> int:0.06 <-- Falsch bei sprintf und int
0.070 --> sprintf:0.07 <> round:0.07 <> int:0.07
0.075 --> sprintf:0.07 <> round:0.08 <> int:0.08 <-- Falsch bei sprintf
0.080 --> sprintf:0.08 <> round:0.08 <> int:0.08
0.085 --> sprintf:0.09 <> round:0.09 <> int:0.09
0.090 --> sprintf:0.09 <> round:0.09 <> int:0.09
0.095 --> sprintf:0.10 <> round:0.10 <> int:0.10
|< 1 2 3 4 >| | 32 Einträge, 4 Seiten |