нарезать неиспользованные десятичные дроби с помощью JavaScript - PullRequest
12 голосов
/ 19 июня 2009

У меня есть ввод валюты и мне нужно возвращать только значащие цифры. Ввод всегда имеет два десятичных знака, поэтому:

4.00  ->  4
4.10  ->  4.1
4.01  ->  4.01

Вот как я сейчас это делаю:

// chop off unnecessary decimals
if (val.charAt(val.length-1) == '0') { // xx.00
    val = val.substr(0, val.length-1);
}
if (val.charAt(val.length-1) == '0') { // xx.0
    val = val.substr(0, val.length-1);
}
if (val.charAt(val.length-1) == '.') { // xx.
    val = val.substr(0, val.length-1);
}

, который работает и имеет определенную направленность, которая мне нравится, но, может быть, есть более симпатичный способ.

Полагаю, я мог бы использовать цикл и выполнить его три раза, но на самом деле кажется, что он будет по крайней мере таким же громоздким к тому времени, когда я обусловлю оператор if. Кроме этого, есть идеи? Я полагаю, что есть регулярный способ сделать это тоже ...

Ответы [ 7 ]

14 голосов
/ 19 июня 2009

Ваш код также отсекает нули в числах, таких как «1000». Лучшим вариантом будет нарезать только те нули, которые идут после десятичной точки. Основная замена регулярными выражениями будет выглядеть так:

str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, "");              // remove trailing dot
14 голосов
/ 19 июня 2009

Мне кажется, parseFloat () делает это.

parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
4 голосов
/ 19 июня 2009
string to string: parseFloat(value).toFixed(2);
string to number: +(parseFloat(value).toFixed(2))
number to number: Math.round(value*100)/100;
number to string: (Math.round(value*100)/100).toFixed(2);
3 голосов
/ 07 августа 2014

Я думаю, это то, что вы хотите

    v = 33.404034
    v.toFixed(2) # v -> 33.40
    parseFloat(v.toFixed(2)) # 33.4

и у вас есть

    v = 33.00704034
    v.toFixed(2) # v -> 33.01
    parseFloat(v.toFixed(2)) # 33.01

    v = 33.00304034
    v.toFixed(2) # v -> 33.00
    parseFloat(v.toFixed(2)) # 33
2 голосов
/ 19 июня 2009

Итак, вы начинаете со строки и хотите получить результат строки, верно?

val = "" + parseFloat(val);

Это должно работать. Более краткий

val = "" + +val;

или

val = +val + "";

тоже подойдет, но эту форму слишком сложно понять.

Как это работает? Они преобразуют строку в число, а затем обратно в строку. Возможно, вы не захотите их использовать, но знание того, как работают преобразования JavaScript, поможет вам отладить все, что вы придумали.

1 голос
/ 19 июня 2009
String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"

parseFloat работает, но вы должны привести его обратно к строке.

0 голосов
/ 17 мая 2014

Я сейчас пытаюсь найти подобное решение. Вот как я сюда попал.

Я использовал функцию Number () для своего приложения, но похоже, что она работает так же, как parseFloat ()

http://jsfiddle.net/4WN5y/

Я удаляю и запятые перед проверкой номера.

 var valueAsNumber = Number( val.replace(/\,/g,'') );
...