Hej,
Har lite problem med en uträkning i javascript.
Visar ett tal på hemsidan, låt säga att det är 123 456,00 (etthundratjugotretusenfyrahundrafemtiossex).
Värdet lokaliseras beroende på vilket språk som är valt. De olika varianterna ser ut såhär:
Svenska - 123 456,00
Engelska - 123,456.00
Italienska - 123.456,00
När jag nu ska ta det värdet och dra av 10 000 så blir det fel, det "första" värdet tolkas som 123 istället för 123 456.
Finns det någon enkel lösning på det här?
Tack,
Inga idéer?
Skulle verkligen behöva en lösning på det här.
spangoMedlem sedan juni 20008 205 inlägg Tror inte det finns någon korrekt lösning, men du kan ju pröva ett fulhack som utgår ifrån att den sista icke-siffran är decimaltecknet. Typ så här:
function parseFloatL10nFulhack(s){
return parseFloat(s.replace(/\s+/g, "").replace(/\D(?=\d*\D)/g, "").replace(/\D/, "."));
}
<script>
function parseCustomNumber(n){
if(/^\s*\d{0,3},?\d{1,3}\.\d\d\s*$/.test(n)){//Engelska
return parseFloat(n.replace(/[,\s]/g, ""));
}else{
return parseFloat(n.replace(/[.\s]/g, "").replace(",", "."));
}
}
// Test
alert("Svenska\t" + (parseCustomNumber("123 456,00")-10000));
alert("Engelska\t" + (parseCustomNumber("123,456.00")-10000));
alert("Italienska\t" + (parseCustomNumber("123.456,00")-10000));
</script>
Denna kod funkar bara om du bara använder precis de tre lokaliseringarna, och inga andra. Vidare tillåts i den koden bara sex siffror till vänster om decimalpunkten. Behöver du mer?
Aha, det var ju dåligt...
Det finns ingen funktion likt setLocale för att tvinga scriptet att beräkna på "rätt" sätt?
nitro2k01 skrev:
Denna kod funkar bara om du bara använder precis de tre lokaliseringarna, och inga andra. Vidare tillåts i den koden bara sex siffror till vänster om decimalpunkten. Behöver du mer?
Sajten finns i nuläget på 7 språk och fler kommer tillkomma, så berhöver en lösning som funkar korrekt.
Tror jag struntar i det här helt och hållet istället.
Värdet kan nämligen vara 1, 10, 100, 123 456 eller vad som helst.
Spangos lösning bör funka som du vill.
nitro2k01 skrev:
Spangos lösning bör funka som du vill.
Problemet är att jag tror inte att alla tal har 1 eller 2 decimaler och då funkar det ändå inte, right?
spangoMedlem sedan juni 20008 205 inlägg Testa och se. Varför skulle det inte funka?
red. Jaså, nu hajar jag - släng in 1000000 formaterat med amerikanska regler (1,000,000), och den tror att det är 1000.000 vi menar.
Precis, men jag ska testa lite så får vi se.