Как остановить 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);