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 DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
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