Ответ 1
Я верю parseFloat() делает это.
parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
У меня есть валютный ввод и нужно вернуть только значимые цифры. Вход всегда имеет два десятичных знака, поэтому:
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. Кроме этого, любые идеи? Я предполагаю, что существует регулярное средство сделать это тоже...
Я верю parseFloat() делает это.
parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
Ваш код также отрубает нули в цифрах, например "1000". Лучшим вариантом было бы только нарезать нули, которые после десятичной точки. Основная замена регулярными выражениями будет выглядеть так:
str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, ""); // remove trailing dot
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);
Итак, вы начинаете с строки и хотите получить результат строки, верно?
val = "" + parseFloat(val);
Это должно сработать. Чем более кратким
val = "" + +val;
или
val = +val + "";
будет работать, но эта форма слишком сложно понять.
Как это работает? Они преобразуют строку в число, а затем обратно в строку. Возможно, вы не захотите их использовать, но зная, как работают JavaScript-преобразования, вы сможете отлаживать все, что вы придумали.
Я думаю, что это то, что вы хотите
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
String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"
parseFloat работает, но вы должны вернуть его в строку.
Я пытаюсь найти такое решение прямо сейчас. Вот как я сюда попал.
Я использовал функцию Number() для своего приложения, но выглядит так же, как parseFloat()
Я удаляю и запятые перед проверкой числа.
var valueAsNumber = Number( val.replace(/\,/g,'') );