Kim Ludvigsen tastede følgende:
> Birger Sørensen skrev:
>> Kim Ludvigsen formulerede mandag:
>>>
>>>> Altså en rutine der fjerner . og erstatter , med .
>>>
>>> Kender du sådan en færdig en?
>>
>> Nej jeg kender ikke sådan en færdiglavet ^^
>>
>> Jeg ved faktisk ikke, hvilke muligheder der ligger i Number
>> objectet - eller om der overhovedet er nogen.
> ...
>> og så bliver det svært.
>
> Når /du/ siger, det er svært, så har jeg nok ikke mange chancer for at finde
> ud af det.
>
>> Det simpleste er i virkeligheden, at sørge for at input er
>> rigtigt. Altså gøre brugeren opmærksom på, at der skal
>> indtastet i et givet format.
>
> Det vil jeg så gøre, tak!
Hvis du bestemmer dig for, at brugerne skal indtaste uden
tusind-adskiller, mens decimaladskilleren kan være enten , eller . og
må gerne udelades, hvis der ingen decimaler er.
function ToNum( x) {
x = x.replace( ',', '.'); // erstatter et evt , som
decimalseparator med .
return Number( x);
}
Er a og b en repræsentation af de to tal, vil
resultat = Number( ToNum( a) * ToNum( b)).toLocaleStr();
hvor resultat er en streng, der indeholder resultatet, formatteret
efter brugerens PC's sprog.
Er ikke testet, og der gives kun eksempler på engelsk, så.... ;>)
Er heller ikke sikker på, at IE's version af javascript (JScript) vil
gøre tingene rigtigt.
Jeg mindes noget med at replace erstatter den første i IE, men alle i
de rigtige browsere.
Så du skal nok have en gentagen erstatning, som f.eks.
while ( x.indexOf( ',') > -1) { x.replace( ',', '.'); }
hvis du vil bruge den sammen med nedenstående.
Det vil formentlig være fornuftigt med et check på, at der ikke er
flere decimaltegn, end det ene der må være - konvertering til et tal,
vil gå galt ellers.
function DecOK( x) {
return ( x.indexOf( '.') == x.lastIndexOf( '.'));
}
vil returnere sand, hvis der er ingen eller eet . og falsk hvis der er
mere end eet.
Så i alt vil det nok være noget med
function ToNum( x) {
while ( x.indexOf( ',') > -1) { x.replace( ',', '.'); }
// erstatter alle evt ,er med .er
return x;
}
var x1 = ToNum( a);
var x2 = ToNum( b);
var resultat = 'tal ikke brugbare - for mange decimalkarakterer';
if ( DecOK( x1) && DecOK( x2)) {
resultat = Number(x1 * x2).toLocaleStr();
}
Det kom lidt hen ad vejen... B-)
Håber du kan finde hoved og hale...
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk