Leser: 35
|< 1 2 3 4 >| | 32 Einträge, 4 Seiten |
2009-12-11T08:15:57 reneeDie 0.46 gibt's wohl nicht, die 0.4502 gibt's als "unstable" bei trouchelle und die 0.44 als stable ebenfalls bei trouchelle.
2009-12-11T08:39:39 reneeNein, ich war nur von Perl 5.8.x ausgegangen, nicht von 5.10.x.
2009-12-11T08:39:39 reneeFür Perl 5.10.x scheint es das wirklich nicht zu geben...
2009-12-11T10:44:49 leo11Vielleicht kannst du einfach den Sourcecode kopieren. Oder Teile davon. Manchmal ist das so wenig... .
2009-12-11T12:07:30 leo11Nur damit ich das mal lerne: Würde mir jemand zeigen, wie ich eine Zahl wie 2132343.565 Euro vernüftig mit Math::Currency runde? Bei mir werden zwar Tausender-Trenner richtig eingefügt, aber das mit den Nachkommastellen klappt nicht.
2009-12-11T05:59:55 bianca2008-05-08T20:55:17 topegAlle Ansätze patzen irgendwo.
Dieser hier leider auch, wenn es um kaufmännisches Runden geht. Hab diesen Ansatz hier eine Weile verwendet und bin auf etliche Fehler - insbesondere bei negativen Beträgen gestoßen:
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 27 28 29 30 31 32 33 34 35 36
sub round { my $zahl=shift; return undef unless(defined($zahl)); my $stelle=shift || 0; # prepare for Xe[+-]Y Notation # handle big float my ($pre,$number,$exponent)=$zahl=~/^([-+]?)(\d+\.?\d*)(?:e([+-]?\d+))?$/; $exponent=0 unless defined($exponent); $pre='' if(!$pre || $pre ne '-'); # full integer zz with exponent my ($l)=$number=~/\.(.+)$/; $l=$l?length($l):0; $exponent-=$l; $number=~y/.//d; # correct position for round my $stellen=$stelle+$exponent; if($stellen<0) { $exponent=-$stelle; my $add=substr(('0'x abs($stellen)).sprintf("%.0f",$number),$stellen,-$stellen); # round... $number+=$add; $number=('0'x abs($stellen)).sprintf("%.0f",$number); substr($number,$stellen,-$stellen,''); } # reconstruct number $zahl="$pre${number}e$exponent"; return $zahl+0; }
2009-12-11T20:03:12 topegOha stimmt. Bei anderen Sachen klappt es auch nicht. Seltsam, dass mir das bisher nicht aufgefallen ist...
Also hier die überarbeitete Version:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
'-999999999999.999'........auf 2 Stelle(n): '-1000000000000'........... OK
'-999999999999.994'........auf 2 Stelle(n): '-999999999999.99'......... OK
'-2132343.565'.............auf 2 Stelle(n): '-2132343.57'.............. OK
'-12345.35'................auf 1 Stelle(n): '-12345.4'................. OK
'-12345.34'................auf 1 Stelle(n): '-12345.3'................. OK
'-456.5'...................auf 0 Stelle(n): '-457'..................... OK
'-456.4'...................auf 0 Stelle(n): '-456'..................... OK
'-57'......................auf 2 Stelle(n): '-57'...................... OK
'-00000034.999'............auf 2 Stelle(n): '-35'...................... OK
'-12.2345678905'...........auf 9 Stelle(n): '-12.234567891'............ OK
'-9.999'...................auf 3 Stelle(n): '-9.999'................... OK
'-9.999'...................auf 0 Stelle(n): '-10'...................... OK
'-9.999'...................auf 1 Stelle(n): '-10'...................... OK
'-9.999'...................auf 2 Stelle(n): '-10'...................... OK
'-8.9964'..................auf 2 Stelle(n): '-9'....................... OK
'-8.9964'..................auf 0 Stelle(n): '-9'....................... OK
'-8.9964'..................auf 1 Stelle(n): '-9'....................... OK
'-1.9'.....................auf 0 Stelle(n): '-2'....................... OK
'-1.455'...................auf 2 Stelle(n): '-1.46'.................... OK
'-1.295'...................auf 2 Stelle(n): '-1.3'..................... OK
'-1'.......................auf 2 Stelle(n): '-1'....................... OK
'-0.999999999'.............auf 0 Stelle(n): '-1'....................... OK
Use of uninitialized value in pattern match (m//) at rundentest.pl line 261.
Use of uninitialized value in transliteration (tr///) at rundentest.pl line 264.
Use of uninitialized value in concatenation (.) or string at rundentest.pl line 281.
Argument "e0" isn't numeric in addition (+) at rundentest.pl line 282.
'-.5678'...................auf 3 Stelle(n): '0'........................ FEHLER! Erwartet '-0.568'
Use of uninitialized value in pattern match (m//) at rundentest.pl line 261.
Use of uninitialized value in transliteration (tr///) at rundentest.pl line 264.
Use of uninitialized value in concatenation (.) or string at rundentest.pl line 281.
Argument "e0" isn't numeric in addition (+) at rundentest.pl line 282.
'-.5674'...................auf 3 Stelle(n): '0'........................ FEHLER! Erwartet '-0.567'
Use of uninitialized value in pattern match (m//) at rundentest.pl line 261.
Use of uninitialized value in transliteration (tr///) at rundentest.pl line 264.
Use of uninitialized value in concatenation (.) or string at rundentest.pl line 281.
Argument "e0" isn't numeric in addition (+) at rundentest.pl line 282.
'-.5670'...................auf 3 Stelle(n): '0'........................ FEHLER! Erwartet '-0.567'
'-0.5'.....................auf 0 Stelle(n): '-1'....................... OK
'-0.49999999'..............auf 0 Stelle(n): '0'........................ OK
'-0.2225000000'............auf 3 Stelle(n): '-0.223'................... OK
'-0.2224000000'............auf 3 Stelle(n): '-0.222'................... OK
'-0.105'...................auf 2 Stelle(n): '-0.11'.................... OK
'-0.1005'..................auf 3 Stelle(n): '-0.101'................... OK
'-0.05'....................auf 1 Stelle(n): '-0.1'..................... OK
'-0.04'....................auf 1 Stelle(n): '0'........................ OK
'-0.0105'..................auf 3 Stelle(n): '-0.011'................... OK
'-0.005'...................auf 2 Stelle(n): '-0.01'.................... OK
'-0.004'...................auf 2 Stelle(n): '0'........................ OK
'4.24306121591708e-007'....auf 2 Stelle(n): '0'........................ OK
'0.004'....................auf 2 Stelle(n): '0'........................ OK
'0.005'....................auf 2 Stelle(n): '0.01'..................... OK
'0.0105'...................auf 3 Stelle(n): '0.011'.................... OK
'0.04'.....................auf 1 Stelle(n): '0'........................ OK
'0.05'.....................auf 1 Stelle(n): '0.1'...................... OK
'0.1005'...................auf 3 Stelle(n): '0.101'.................... OK
'0.105'....................auf 2 Stelle(n): '0.11'..................... OK
'0.2224000000'.............auf 3 Stelle(n): '0.222'.................... OK
'0.2225000000'.............auf 3 Stelle(n): '0.223'.................... OK
'0.49999999'...............auf 0 Stelle(n): '0'........................ OK
'0.5'......................auf 0 Stelle(n): '1'........................ OK
Use of uninitialized value in pattern match (m//) at rundentest.pl line 261.
Use of uninitialized value in transliteration (tr///) at rundentest.pl line 264.
Use of uninitialized value in concatenation (.) or string at rundentest.pl line 281.
Argument "e0" isn't numeric in addition (+) at rundentest.pl line 282.
'.5670'....................auf 3 Stelle(n): '0'........................ FEHLER! Erwartet '0.567'
Use of uninitialized value in pattern match (m//) at rundentest.pl line 261.
Use of uninitialized value in transliteration (tr///) at rundentest.pl line 264.
Use of uninitialized value in concatenation (.) or string at rundentest.pl line 281.
Argument "e0" isn't numeric in addition (+) at rundentest.pl line 282.
'.5674'....................auf 3 Stelle(n): '0'........................ FEHLER! Erwartet '0.567'
Use of uninitialized value in pattern match (m//) at rundentest.pl line 261.
Use of uninitialized value in transliteration (tr///) at rundentest.pl line 264.
Use of uninitialized value in concatenation (.) or string at rundentest.pl line 281.
Argument "e0" isn't numeric in addition (+) at rundentest.pl line 282.
'.5678'....................auf 3 Stelle(n): '0'........................ FEHLER! Erwartet '0.568'
'0.999999999'..............auf 0 Stelle(n): '1'........................ OK
'1'........................auf 2 Stelle(n): '1'........................ OK
'1.295'....................auf 2 Stelle(n): '1.3'...................... OK
'1.455'....................auf 2 Stelle(n): '1.46'..................... OK
'1.9'......................auf 0 Stelle(n): '2'........................ OK
'8.9964'...................auf 1 Stelle(n): '9'........................ OK
'8.9964'...................auf 0 Stelle(n): '9'........................ OK
'8.9964'...................auf 2 Stelle(n): '9'........................ OK
'9.999'....................auf 3 Stelle(n): '9.999'.................... OK
'9.999'....................auf 2 Stelle(n): '10'....................... OK
'9.999'....................auf 1 Stelle(n): '10'....................... OK
'9.999'....................auf 0 Stelle(n): '10'....................... OK
'12.2345678905'............auf 9 Stelle(n): '12.234567891'............. OK
'00000034.999'.............auf 2 Stelle(n): '35'....................... OK
'57'.......................auf 2 Stelle(n): '57'....................... OK
'456.4'....................auf 0 Stelle(n): '456'...................... OK
'456.5'....................auf 0 Stelle(n): '457'...................... OK
'12345.34'.................auf 1 Stelle(n): '12345.3'.................. OK
'12345.35'.................auf 1 Stelle(n): '12345.4'.................. OK
'2132343.565'..............auf 2 Stelle(n): '2132343.57'............... OK
'999999999999.994'.........auf 2 Stelle(n): '999999999999.99'.......... OK
'999999999999.999'.........auf 2 Stelle(n): '1000000000000'............ OK
'1e+100'...................auf 3 Stelle(n): '1e+100'................... OK
(7.56*1.19)................auf 2 Stellen : '9'........................ OK
(-7.56*1.19)...............auf 2 Stellen : '-9'....................... OK
(.57*100)..................auf 0 Stellen : '57'....................... OK
(.57*100)..................auf 2 Stellen : '57'....................... OK
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 27 28 29 30 31 32 33 34 35 36
sub round { my $zahl=shift; return undef unless(defined($zahl)); my $stelle=shift || 0; # prepare for Xe[+-]Y Notation # handle big float my ($pre,$number,$exponent)=$zahl=~/^([-+]?)([\d.]+)(?:e([+-]?\d+))?$/; $exponent=0 unless defined($exponent); $pre='' if(!$pre || $pre ne '-'); # full integer number with exponent my ($l)=$number=~/\.(.+)$/; $exponent-=$l?length($l):0; $number=~y/.//d; # correct position for round my $stellen=$stelle+$exponent; if($stellen<0) { $exponent=-$stelle; my $add=substr(('0'x abs($stellen)).$number,$stellen,-$stellen); # round... $number+=$add; $number=('0'x abs($stellen)).sprintf("%.0f",$number); substr($number,$stellen,-$stellen,''); } # reconstruct number $zahl="$pre${number}e$exponent"; #$zahl=sprintf("%.${stelle}f",$zahl); return $zahl+0; }
|< 1 2 3 4 >| | 32 Einträge, 4 Seiten |