Подтвердить что ты не робот

Нарезать неиспользуемые десятичные знаки с помощью javascript

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

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. Кроме этого, любые идеи? Я предполагаю, что существует регулярное средство сделать это тоже...

4b9b3361

Ответ 1

Я верю parseFloat() делает это.

parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01

Ответ 2

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

str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, "");              // remove trailing dot

Ответ 3

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

Ответ 4

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

val = "" + parseFloat(val);

Это должно сработать. Чем более кратким

val = "" + +val;

или

val = +val + "";

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

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

Ответ 5

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

    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

Ответ 6

String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"

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

Ответ 7

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

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

http://jsfiddle.net/4WN5y/

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

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