2013-04-22 19 views
7

Mam tę prostą funkcję:toLocaleString() nie jest obsługiwany we wszystkich przeglądarkach?

Chrome, Firefox, IE:

Number(1000000).toLocaleString() 
"1 000 000" // in french system, the space is the separator instead of the comma 

Opera, Maxthon:

Number(1000000).toLocaleString() 
"1000000" 

dlaczego go sformatować i Opera Maxthon nie mogę? wspierają tę metodę, ale nie wykonują jej we właściwy sposób?

Czy istnieje jakaś wymiana toLocaleString()?

+1

Wystarczy zwrócić uwagę, że nie należy spodziewać się również wyjście jednolity w całej użytkowników 'numer (1000000) .toLocaleString();' 'daje mi "1000000"' (Google Chrome, en-GB). Zobacz [** stronę MDN **] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toLocaleString), jakie parametry powinna ona przyjmować i w jakich przeglądarkach jest obsługiwana . –

+0

@PaulS. przepraszam, zapomniałem precyzyjnie, że używam francuskiego systemu operacyjnego, a w systemie francuskim separacja odbywa się za pomocą spacji zamiast przecinka –

+0

wydaje się, że nie było jej również w Chrome! przepraszam, bo myślałem, że metoda MUSI zwrócić zawsze wynik, jeśli jest! –

Odpowiedz

3

language spec pozostawia definicję bardzo otwarty:

15.7.4.3 Number.prototype.toLocaleString()

Wytwarza String wartość, która reprezentuje tę wartość liczbowa sformatowany zgodnie z konwencjami aktualnej lokalizacji środowiska przyjmującego. Ta funkcja jest zależna od implementacji i jest dozwolona, ​​ale nie zachęca do zwrócenia tego samego, co toString.

Różne przeglądarki mogą implementować je w różny sposób i mogą zaimplementować je w różny sposób w zależności od ustawień regionalnych wybranych przez użytkownika.

+0

, więc nie ma bezpośredniej wymiany? muszę zaprogramować formatowanie lub korzystać z biblioteki zewnętrznej? –

+1

@AbdelouahabPp, Jeśli potrzebujesz identycznego formatu liczb we wszystkich przeglądarkach, to tak, musisz unikać funkcji zależnych od implementacji. –

+0

ah dziękuję, mam nadzieję, że zaimplementują to jako usunięte z tej listy;) –

9

Dane wyjściowe będą się różnić w zależności od ustawień regionalnych użytkownika, nawet jeśli Number.prototype.toLocaleString jest obsługiwany przez ich przeglądarkę, np. dla mnie na pl-GB, Number(1000000).toLocaleString(); daje mi "1,000,000".

Czy istnieje jakaś wymiana toLocaleString()?

Dlaczego nie napisać, aby zrobić dokładnie to, co chcesz? Na przykład,

function localeString(x, sep, grp) { 
    var sx = (''+x).split('.'), s = '', i, j; 
    sep || (sep = ' '); // default seperator 
    grp || grp === 0 || (grp = 3); // default grouping 
    i = sx[0].length; 
    while (i > grp) { 
     j = i - grp; 
     s = sep + sx[0].slice(j, i) + s; 
     i = j; 
    } 
    s = sx[0].slice(0, i) + s; 
    sx[0] = s; 
    return sx.join('.'); 
} 

Teraz

localeString(1000000.00001); 
// "1 000 000.00001" 
+0

ah! to wykona zadanie! dziękuję –

+0

, ponieważ pochodzę z Pythona, myślałem, że to było proste, meto było odwrócić stringm forat to, a następnie odwrócić to .... ale będzie wiele linii!w pythonie, jeśli chcesz odwrócić ciąg znaków, wykonujesz krok ujemny, '' hello "[:: - 1]', a ostatni element jest ujemny, na przykład 'o' będzie' "hello" [ -1] 'tak naprawdę świat jest trudny od kogoś, kto pochodzi z Pythona;) thnk you again –

+2

' 'abc'.split (''). Reverse(). Join ('')' to ''cba'', ale ty nadal musiałby zapętlać się nad tym w ten sposób. Zamiast tego zapętlaj się. Ponadto '' abc'.slice (-1) 'to' 'c''. –

Powiązane problemy