Как остановить parseFloat() от удаления нулей вправо от десятичной
У меня есть функция, которую я использую для удаления ненужных символов (определенных как символы валют) из строк, а затем возвращает значение как число. При возврате значения, я делаю следующий вызов:
return parseFloat(x);
Проблема заключается в том, что когда x == "0.00", я ожидаю получить 0.00 (float с двумя десятичными знаками) назад. Вместо этого я получаю 0.
Я также пробовал следующее:
return parseFloat(x).toFixed(2);
и все равно получится просто 0 назад. Я что-то упускаю? Любая помощь будет принята с благодарностью.
Спасибо!
Ответы
Ответ 1
просто:
function decimalPlaces(float,length) {
ret = "";
str = float.toString();
array = str.split(".");
if(array.length==2) {
ret += array[0] + ".";
for(i=0;i<length;i++) {
if(i>=array[1].length) ret += '0';
else ret+= array[1][i];
}
}
else if(array.length == 1) {
ret += array[0] + ".";
for(i=0;i<length;i++) {
ret += '0'
}
}
return ret;
}
document.write(decimalPlaces(3.123,6));
Ответ 2
parseFloat() превращает строку в число с плавающей запятой. Это двоичное значение, а не десятичное представление, поэтому понятие числа нулей справа от десятичной точки не применяется; все зависит от того, как оно отформатировано обратно в строку. Что касается toFixed, я бы предложил преобразовать число с плавающей запятой в Number:
new Number(parseFloat(x)).toFixed(2);
Ответ 3
это должно работать:
return parseFloat(x).toFixed(2);
вы можете проверить его, запустив это в firebug:
var x = '0.00';
alert(parseFloat(x).toFixed(2));
Ответ 4
Для будущих читателей у меня возникла эта проблема, так как я хотел onChange
значение onChange textField в число с плавающей точкой, чтобы, по мере ввода пользователем, я мог обновить свою модель.
Проблема была с десятичным знаком, и значения, такие как 12.120
были бы проанализированы как 12.12
поэтому пользователь никогда не мог бы ввести значение, такое как 12.1201
.
Я решил это, чтобы проверить, содержит ли значение STRING десятичное место, а затем разделить строку на это десятичное число, а затем посчитать количество символов после места, а затем отформатировать число с этим конкретным количеством мест.
Проиллюстрировать:
const hasDecimal = event.target.value.includes(".");
const decimalValue = (hasDecimal ? event.target.value.split(".") : [event.target.value, ""])[1];
const parsed = parseFloat(event.target.value).toFixed(decimalValue.length);
const value = isNaN(parsed) ? "" : parsed;
onEditValue(value);