31. august 2006 - 14:34
Der er
11 kommentarer og 1 løsning
Perl - optæl præcist
Jeg skal sammentælle et par millioner tal og bruger sprintf for at sikre at alle decimaler er med. Alligevel får jeg en fejl på 0,01 - og lidt til. Min sammentælling SKAL være præcis. Nogen gode ideer???
Annonceindlæg fra Computerworld it-jobbank
31. august 2006 - 15:05
#1
du bruger forhaabentligt ikke floating point ? det skal give "stoej" ! konverter fra streng til heltal (hvis beloeb saa oerer), laeg dem sammen og put decimal tilbage ved udskrift
31. august 2006 - 20:00
#2
Tak for hjælpen. Kunne du give mig et eksempel, så jeg kan se syntaksen?
31. august 2006 - 20:32
#3
det bliver foerst senere saa - jeg er ikke i naerheden af en maskine med Perl
02. september 2006 - 02:48
#4
min perl er godt nok blevet rusten (men OK det er også 9 år siden jeg sidst har kigget på det) eksempel følger input: 123.45 678.90 normal: open(F, "num.txt"); $sum = 0; while($line = <F>) { $sum = $sum + $line; } close(F); print "Sum=$sum \n"; heltal: open(F, "num.txt"); $sum = 0; while($line = <F>) { @parts = split(/\./,$line); $sum = $sum + ($parts[0]*100 + $parts[1]); } close(F); $sum1 = ($sum - $sum % 100) / 100; $sum2 = $sum % 100; print "Sum=$sum1.$sum2\n"; jeg ved ikke om det hjælper, men det er da værd at prøve
07. september 2006 - 14:25
#5
Det virker fortrinligt, hvis jeg kun opererer med 2 decimaler - men ikke med 10 Er der nogen smart løsning på det????
07. september 2006 - 22:13
#6
prøv med en: use bigint; øverst i programmet
13. september 2006 - 13:40
#7
Det duer ikke. Kræver import at en pakke??? Er der andre muligheder???
13. september 2006 - 17:49
#8
nu havde jeg bignum med i min Perl ... det er der vel, man må kunne splitte op i 3 dele men det skal jeg lige tygge lidt på
18. september 2006 - 03:34
#9
123.4500050001 678.9000050001 og open(F, "num.txt"); $sum = 0; $sum3 = 0; while($line = <F>) { @parts = split(/\./,$line); $sum = $sum + ($parts[0]*100000 + substr($parts[1],0,5)); $sum3 = $sum3 + substr($parts[1],5,5); } close(F); $sum = $sum + ($sum3 - $sum3 % 100000) / 100000; $sum3 = $sum3 % 100000; $sum1 = ($sum - $sum % 100000) / 100000; $sum2 = $sum % 100000; $res = sprintf("%d.%05d%05d",$sum1,$sum2,$sum3); print "Sum=$res\n";
18. september 2006 - 04:04
#10
den forrige kode skal iøvrigt også bruge sprintf for at være korrekt
21. september 2006 - 19:00
#11
Hej arne v. Tusind tak for din indsats. Sender du et svar,så du kan få dine point?
21. september 2006 - 20:05
#12
svar
Kurser inden for grundlæggende programmering