Самый простой способ справиться с первыми тремя примерами является:
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);
}
Шляпа вы пробовали? – j08691
12.00 и 1200 - это не то же самое число. Math.round() работает правильно. –