On Fri, 28 Nov 2008 05:27:18 -0800, damjensen wrote:
> Jeg har haft brug for at behandle et Excelark som indeholder tal, både
> negative og positive.
>
> I den forbindelse har jeg haft noget frustration ud af decimaltal og
> negative værdier. Jeg har opdaget noget "underligt" som jeg vil høre om
> andre har set.
>
> Først: Jeg bruger Win32, v5.10.0 built for MSWin32-x86-multi-thread
>
> For at kunne bruge tal med komma er jeg nødt til at sætte locale. Men
> jeg har fundet ud af at
> 1) unix-locales åbenbart ikke findes på Win32 2) dansk hedder "da" på
> Win32, dette er nærmest ikke dokumenteret nogen steder
> 3) tilsyneladende fungerer dansk ikke på Perl, se nedenstående:
>
>
Kode > use strict;
> use locale;
> use POSIX;
>
> POSIX::setlocale( &POSIX::LC_ALL, "da" ); my $number1 = "-123,44";
> my $number2 = 10;
> my $result = $number1 / $number2;
> printf ('%4.4f', $result);
> |
>
> Dette resulterer i -12,3000 - altså IKKE det korrekte resultat.
>
> Udskiftes "da" med den TYSKE variant ("ge" ??!!) fungerer det, og
> resultatet bliver korrekt -12,3440.
>
> Den danske locale smider simpelthen decimaldelen væk. Prøv selv at
> indføre
> printf ('%4.4f', $number1 * -1);
>
>
> Hvad er det der går galt med dansk locale på Win32, og hvor er den slags
> defineret / dokumenteret ?
> Det er meget svært at finde noget som helst om emnet i Perl grupper. Men
> det er nødvendigt fordi det er
> et helvede at håndtere decimaltal med dot i beregninger og komma i
> print.
>
> Håber nogle kloge eksperter kan hjælpe.
>
> Mvh Torben
Hej Torben -
Nu er det måske ikke helt det du vil, men hvad med bare at springe over
hvor gæret et lavest:
my $number1 = "-123,44";
$number1 =~ s/,/./;
( $Nummer har du jo nok alligevel indlæst som tekst, tidligerer. Du
kommer jo til at "konverete" til tal alligevel... $number1+=0;)
Ok, det hjælper jo ikke på din printf...
- Og det var heller ikke det du spurgte om.
/holger