Czy ktoś ma sugestie dotyczące pisania wrażliwych na kulturę funkcji ParseFloat w JavaScript, Tak więc, gdy mam ciąg 100 000,22 w formacie kultury amerykańskiej, funkcja analizowania składni zwraca 100000.22, natomiast jeśli wprowadzę 100 000,22 w kulturze szwedzkiej, zwróci ona 100000.22 w float?Kulturowa funkcja ParseFloat w języku JavaScript?
Odpowiedz
Jest to nieco szorstki i gotowe, ale może to być wystarczające, co pozwala przechodzić w tysiącach i separatorów dziesiętnych:
function parseFloatOpts(num, decimal, thousands) {
var bits = num.split(decimal, 2),
ones = bits[0].replace(new RegExp('\\' + thousands, 'g'), '');
ones = parseFloat(ones, 10),
decimal = parseFloat('0.' + bits[1], 10);
return ones + decimal;
}
Przykłady:
parseFloatOpts("100.000,22", ',', '.'); //100000.22
parseFloatOpts("100,000.22", '.', ','); //100000.22
NB że ta nie zapewnia, że separator tysięcy rzeczywiście reprezentuje tysiące itd. lub robi wiele innych zabezpieczeń, które możesz chcieć, w zależności od znaczenia funkcji.
Dzięki za odpowiedź, jestem w stanie rozwiązać problem w ASP.Net. Zobacz moją powyższą odpowiedź w moim oryginalnym wpisie. –
var parse = function(st){
if(st.indexOf(",") === st.length-3){
st = st.replace(".", "").replace(",", ".");
}else{
st = st.replace(",", "");
}
return parseFloat(st, 10)
}
console.log(parse("100,000.22")) // 100000.22
console.log(parse("100.000,22")) // 100000.22
Właśnie sprawdzam, czy w pozycji trzeciej do ostatniej jest przecinek. To może być następnie rafinowana w celu sprawdzenia, czy nie jest to okres, w 4 do ostatniej pozycji w przypadku tobą jest nie przecinek (takich jak 100.000)
Patrząc na lonesomday dał mi tę myśl:
Można również zrobić :
function parse (str)
var ar = str.split(/\.|,/);
return Number(ar[0]+ar[1]+"."+ar[3]);
Jak to działa dla zmiennej liczby separatorów tysięcy? – lonesomeday
Oto przybliżona funkcja. Przyjmie on ostatnią interpunkcję, aby wskazać miejsca dziesiętne, bez względu na to, czy jest to przecinek, kropka, czy jakikolwiek inny znak, który należy wskazać. Następnie eliminuje inne znaki interpunkcyjne z całej liczby. Zrzuca je z powrotem i parsuje jako float.
function normalizeFloat(number, chars) {
var lastIndex = -1;
for(i=0; i < chars.length; i++) {
t = number.lastIndexOf(chars[i]);
if (t > lastIndex) {
lastIndex = t;
}
}
if (lastIndex == -1) {
lastIndex = number.length;
}
var whole = number.substring(0, lastIndex);
var precision = number.substring(lastIndex);
for (i=0; i < chars.length; i++) {
whole = whole.replace(chars[i], '');
precision = precision.replace(chars[i],'.');
}
number = whole + precision;
f = parseFloat(number);
return f;
}
spróbuj tego:
alert(normalizeFloat('12.345,77', [',','.']).toFixed(2));
alert(normalizeFloat('12,345.77', [',','.']).toFixed(2));
Mam poprawie funkcji mwilcox”do obsługi wartości withous separatorów.
function parseFloatOpts (str) {
if(typeof str === "number"){
return str;
}
var ar = str.split(/\.|,/);
var value = '';
for (var i in ar) {
if (i>0 && i==ar.length-1) {
value += ".";
}
value +=ar[i];
}
return Number(value);
}
- 1. JavaScript parseFloat w różnych kulturach
- 2. Jak zaokrąglić wyniki parseFloat w Jquery/Javascript?
- 3. javascript parseFloat "500,000" zwraca 500, gdy potrzebuję 500000
- 4. funkcja Alias w javascript
- 5. Różnica w zachowaniu między parseInt() i parseFloat()
- 6. Różnica kulturowa między etykietą a blokiem tekstowym
- 7. Jak stworzyć egzystencjalnego operatora stylu w języku JavaScript w JavaScript?
- 8. JavaScript funkcja konwersji notacji szachy
- 9. co oznacza funkcja? W JavaScript?
- 10. Funkcja JavaScript w PHP zCharCode()
- 11. Ukrywanie przycisku w języku Javascript
- 12. Transformacje SVG w języku JavaScript
- 13. ognisko "wklej" w języku JavaScript
- 14. Funkcja wymazywania nazw w języku Python
- 15. Funkcja kopiowania tablic w języku Go
- 16. kiedy funkcja zwraca odwołanie w języku C++
- 17. Funkcja pakietu Perla ("V") w języku Python?
- 18. W języku Ruby, jak działa funkcja Coerce()?
- 19. javascript funkcja inArray
- 20. Funkcja JavaScript setset()
- 21. console.log javascript [Funkcja]
- 22. Funkcja przewijania Javascript
- 23. Funkcja JavaScript inna składnia?
- 24. Framework UI oparty na języku JavaScript oparty na języku JavaScript
- 25. Funkcja Jquery Javascript Undefined
- 26. jquery globalizować problemy z walidacją parseFloat
- 27. Funkcja Javascript: Zastosowanie Zastosuj
- 28. Funkcja Javascript wait()
- 29. Funkcja nie zdefiniowana javascript
- 30. JavaScript: funkcja wywołania z innego pliku
Nie wiem, czy to jest sprawa kultury, to jest rzecz. – Victor
Kiedy pisałem rozwiązanie dla aplikacji ASP.Net, udało mi się rozwiązać mój problem, nie pisząc dla niego żadnego niestandardowego rozwiązania. Ponieważ biblioteka MSDN udostępnia metodę JavaScript Base Type Extensions, jedną z nich są rozszerzenia typu liczbowego, które mają funkcje localeFormat i parseLocale. Ta funkcja zapewnia konwersję z/do formatu dziesiętnego w.r.t. zobacz to jak http://msdn.microsoft.com/en-us/library/bb310835(v=VS.90).aspx. –
Można również ustawić kulturę z serwera, w przeciwnym razie te funkcje będą używać domyślnej kultury. zobacz ten link http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.90).aspx. W moim przypadku muszę ustawić sv-SE, ponieważ muszę używać kultury szwedzkiej do formowania liczb. –