нарезать неиспользованные десятичные дроби с помощью JavaScript

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

<code>4.00  ->  4
4.10  ->  4.1
4.01  ->  4.01
</code>

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

<code>// 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);
}
</code>

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

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

Ответы на вопрос(7)

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

str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, "");              // remove trailing dot
 12 янв. 2014 г., 23:11
Для будущих исследователей: предыдущий комментарий больше не актуален
 19 июн. 2009 г., 00:04
Лучше использовать 0+ вместо 0 *, чтобы регулярное выражение не совпадало, если нет завершающих нулей.
 19 июн. 2009 г., 00:08
Вы правы, 0 * при совпадении нуля 0 не делает ничего полезного. Но, по крайней мере, это также не приносит никакого вреда.

    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 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, поможет вам отладить все, что вы придумали.

parseFloat () Является ли это.

parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
 18 июн. 2009 г., 23:59
Это правда.
 19 июн. 2009 г., 00:11
Я думаю, что они будут представлены правильно, если вы не выполняете над ними операции. И вы все равно не можете выполнять операции в десятичном формате в JavaScript (без десятичной библиотеки, которая использует строки или массив целых чисел внутри).
 18 июн. 2009 г., 23:57
Число с плавающей запятой может не иметь достаточной точности для точного представления заданного десятичного значения; Вы никогда не должны использовать их для представления валюты.
String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"

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

http://jsfiddle.net/4WN5y/

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

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

Ваш ответ на вопрос