2011-02-01 3 views
9

У меня есть функция, которую я использую для удаления ненужных символов (определенных как символы валют) из строк, а затем возвращает значение в виде числа. При возврате значения, я делаю следующий вызов:Как остановить parseFloat() от удаления нулей вправо от десятичного числа

return parseFloat(x);

У меня есть проблема в том, что, когда х == «0,00» Я ожидаю, чтобы получить 0,00 (поплавок с двумя знаками после запятой) назад. То, что я получаю вместо просто 0.

Я также попытался следующие:

return parseFloat(x).toFixed(2);

и до сих пор получить просто 0 обратно. Я что-то упускаю? Любая помощь будет принята с благодарностью.

спасибо !!

ответ

4

простой:

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)); 
+0

Я думаю, что это решение, потому что вам нужно строка для печати, а не число, потому что я думаю для вас 3.00 == 3, но вы хотите напечатать номер с двумя знаками после запятой. –

+0

он не круглый, если 2.009 должно быть 2.01 – Mahi

10

это должно работать:

return parseFloat(x).toFixed(2); 

вы можете проверить это, запустив это в поджигатель:

var x = '0.00'; 
alert(parseFloat(x).toFixed(2)); 
+0

Не О.П. сказать, что он пытался, что и это не сработало? –

+0

@Ted Hopp - Независимо от того, что заявляет OP, я пробовал его в IE 8, Safari, Firebug и консоли Chrome JS, я даю Виктору +1 за это, так как это правильно, по крайней мере, насколько я может проверить. – jball

+0

@jball - Я согласен ... он должен работать, но это не так. Я надеялся, что кто-то видел подобное поведение раньше и мог дать мне голову, почему это может быть не так. – user599144

7

parseFloat() превращает строку в число с плавающей точкой. Это двоичное значение, а не десятичное представление, поэтому понятие числа нулей справа от десятичной точки не применяется; все зависит от того, как оно отформатировано обратно в строку. Что касается toFixed, я хотел бы предложить, преобразование числа с плавающей запятой в номер:

new Number(parseFloat(x)).toFixed(2); 
+0

Если x = '2.00' или' 2.00'', вы все равно получите строковое представление '' 2.00''. –

+0

@ConAntonakos - Ну, да, вот в чем дело. Вы не можете иметь «завершающие нули» в значении с плавающей запятой, только в строчном представлении значения. –

+0

Я понимаю, но я надеялся, что вы сможете сохранить плавающую точку, не требуя, чтобы она была привязана к строке. :( –

Смежные вопросы