webForumDet fria alternativet

Uträkning med lokaliserade tal

9 svar · 411 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#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,

MickeA.comMedlem sedan feb. 20034 441 inlägg
#2

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

spangoMedlem 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/, "."));
}
nitro2k01Medlem sedan aug. 20039 342 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?

MickeA.comMedlem 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?

MickeA.comMedlem 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.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#7

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

MickeA.comMedlem 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?

spangoMedlem 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.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#10

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

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)