webForumDet fria alternativet
Logga in / Bli medlem

Uträkning med lokaliserade tal

JavaScript

9 svar · 413 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

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,

Medlem sedan feb. 20034 441 inlägg
#2

Inga idéer?
Skulle verkligen behöva en lösning på det här.

Medlem sedan juni 20008 205 inlägg
#3

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/, "."));
}
Medlem sedan aug. 20039 340 inlägg
#4
<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?

Medlem sedan feb. 20034 441 inlägg
#5

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?

Medlem sedan feb. 20034 441 inlägg
#6

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.

Medlem sedan aug. 20039 340 inlägg
#7

Spangos lösning bör funka som du vill.

Medlem sedan feb. 20034 441 inlägg
#8

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?

Medlem sedan juni 20008 205 inlägg
#9

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.

Medlem sedan feb. 20034 441 inlägg
#10

Precis, men jag ska testa lite så får vi se.

266 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)