Oto prosty scenariusz. Chcę pokazać odjęcie dwóch wartości wyświetlanych w mojej witrynie:
//Value on my websites HTML is: "75,00"
var fullcost = parseFloat($("#fullcost").text());
//Value on my websites HTML is: "0,03"
var auctioncost = parseFloat($("#auctioncost").text());
alert(fullcost); //Outputs: 75
alert(auctioncost); //Ouputs: 0
Czy ktoś może mi powiedzieć, co robię źle?
javascript
parsefloat
Tylko tu boliwijczyk
źródło
źródło
5.200,75
oznacza pięć tysięcy dwieście siedemdziesiąt pięć.javascript parseFloat nie przyjmuje parametru ustawień regionalnych. Więc trzeba będzie wymienić
,
z.
parseFloat('0,04'.replace(/,/, '.')); // 0.04
źródło
Dlaczego nie skorzystać z globalizacji? To tylko jeden z problemów, z którymi możesz się spotkać, gdy nie używasz języka angielskiego:
Globalize.parseFloat('0,04'); // 0.04
Kilka linków w stackoverflow, do których należy zajrzeć:
źródło
parseFloat
analizuje zgodnie z definicją JavaScript literału dziesiętnego , a nie zgodnie z definicją ustawień regionalnych. (Np.parseFloat
Nie jest świadomy lokalizacji). Literały dziesiętne w JavaScript używają.
jako przecinka dziesiętnego.źródło
Jak @JaredPar wskazał w swojej odpowiedzi, użyj
parseFloat
zastąpieniavar fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
Po prostu zastąpienie litery
comma
adot
spowoduje naprawę, chyba że liczba ponad tysiąca w1.000.000,00
ten sposób da ci niewłaściwą cyfrę. Więc musisz wymienićcomma
usunąćdots
.// Remove all dot's. Replace the comma. var fullcost = parseFloat($("#fullcost").text().replace(/\./g,'').replace(',', '.'));
Używając dwóch zamienników, będziesz w stanie poradzić sobie z danymi bez otrzymywania błędnych cyfr w wyniku.
źródło
Lepiej jest użyć tej składni do zastąpienia wszystkich przecinków w przypadku miliona 1,234,567
var string = "1,234,567"; string = string.replace(/[^\d\.\-]/g, ""); var number = parseFloat(string); console.log(number)
Sposób
g
usunięcia wszystkich przecinków.Sprawdź demo Jsfiddle tutaj .
źródło
Liczby w JS używają
.
znaku (kropka / kropka), aby wskazać kropkę dziesiętną, a nie,
(przecinek).źródło
Dla każdego, kto tu przyjeżdża i zastanawia się, jak poradzić sobie z tym problemem, w którym mogą występować przecinki (
,
) i kropki (.
), ale dokładny format liczb może nie być znany - tak poprawiam ciąg przed użyciemparseFloat()
(zapożyczając pomysły z innych odpowiedzi):function preformatFloat(float){ if(!float){ return ''; }; //Index of first comma const posC = float.indexOf(','); if(posC === -1){ //No commas found, treat as float return float; }; //Index of first full stop const posFS = float.indexOf('.'); if(posFS === -1){ //Uses commas and not full stops - swap them (e.g. 1,23 --> 1.23) return float.replace(/\,/g, '.'); }; //Uses both commas and full stops - ensure correct order and remove 1000s separators return ((posC < posFS) ? (float.replace(/\,/g,'')) : (float.replace(/\./g,'').replace(',', '.'))); };
// <-- parseFloat(preformatFloat('5.200,75')) // --> 5200.75
Pozwoliłoby to przynajmniej na parsowanie brytyjskich / amerykańskich i europejskich formatów dziesiętnych (zakładając, że ciąg zawiera prawidłową liczbę).
źródło
1,234.56
i1.234,56
W moim przypadku miałem już kropkę
(.)
i przecinek(,)
, więc to, co zadziałało, toreplace
przecinek(,)
z pustym ciągiem, jak poniżej:parseFloat('3,000.78'.replace(',', ''))
Przy założeniu, że kwota z istniejącej bazy danych wynosi 3 000,78. Wyniki są następujące:
3000.78
bez początkowego przecinka(,)
.źródło
Z mojego kraju pochodzenia format waluty to „3.050,89 €”
parseFloat identyfikuje kropkę jako separator dziesiętny, aby dodać 2 wartości, możemy to zapisać w ten sposób:
parseFloat(element.toString().replace(/\./g,'').replace(',', '.'))
źródło