2015-02-25 3 views
0

Я хочу, чтобы удалить из десятичного числа в JavaScript: Что-то вроде этого:удалить десятичный в JavaScript

12 => 12 
12.00 => 1200 
12.12 => 1212 
12.12.12 => error: please enter valid number. 

Я не могу использовать Math.round(number). Потому что это даст мне другой результат. Как я могу это достичь? Благодарю.

+1

Шляпа вы пробовали? – j08691

+0

12.00 и 1200 - это не то же самое число. Math.round() работает правильно. –

ответ

3

Вы можете использовать метод replace для удаления первого периода в строке, то вы можете проверить, если есть другой период осталось:

str = str.replace('.', ''); 
if (str.indexOf('.') != -1) { 
    // invalid input 
} 

Демо:

function reformat(str) { 
 
    str = str.replace('.', ''); 
 
    if (str.indexOf('.') != -1) { 
 
    return "invalid input"; 
 
    } 
 
    return str; 
 
} 
 

 
// show in Stackoverflow snippet 
 
function show(str) { 
 
    document.write(str + '<br>'); 
 
} 
 

 
show(reformat("12")); 
 
show(reformat("12.00")); 
 
show(reformat("12.12")); 
 
show(reformat("12.12.12"));

+0

Спасибо. Оно работает.. –

5

Самый простой способ справиться с первыми тремя примерами является:

function removeDecimal(num) { 
    return parseInt(num.toString().replace(".", ""), 10); 
} 

Это предполагает, что аргумент является числом, уже, в этом случае ваш второй и четвертый примеры невозможны.

Если это не так, то вам нужно подсчитать количество точек в строке, используя что-то вроде (trick taken from this question):

(str.match(/\./g) || []).length 

Объединение двух и метания, вы можете:

function removeDecimal(num) { 
    if ((num.toString().match(/\./g) || []).length > 1) throw new Error("Too many periods!"); 

    return parseInt(num.toString().replace(".", ""), 10); 
} 

Это будет работать для большинства чисел, но может привести к ошибкам округления для особо больших или точных значений (например, removeDecimal("1398080348.12341234") вернет 139808034812341230).

Если вы знаете, что вход всегда будет рядом, и вы хотите получить действительно сложно, вы также можете сделать что-то вроде:

function removeDecimal(num) { 
    var numStr = num.toString(); 
    if (numStr.indexOf(".") === -1) return num; 
    return num * Math.pow(10, numStr.length - numStr.indexOf(".") - 1); 
} 
+0

Или '+ (num + ''). Replace ('.', '')' :) –

+0

Почему бы не просто 'parseInt (num.toString(). Replace (/\./, ''), 10)'? Таким образом, вы заменяете только первую точку, а затем анализируете ее как целое. Ваше регулярное выражение будет соответствовать ',' 's, а не '.''. – h2ooooooo

+0

@ h2ooooooo OP запросил ошибку, если присутствует более одной точки, поэтому я добавил эту логику. – ssube

1

Как насчет number = number.replace(".", "");?