我正在使用JavaScript验证十进制数。
我只是使用NaN
var a = 12345.67 是否有任何javascript函数来获取小数点前后的计数或值本身。
before() should return 1234
after() should return 67
请不要建议子串!
答案 0 :(得分:29)
var a = 12345.67;
alert(a.toString().split(".")[0]); ///before
alert(a.toString().split(".")[1]); ///after
这是一个简单的小提琴http://jsfiddle.net/qWtSc/
zzzzBov的建议是
Number.prototype.before = function () {
var value = parseInt(this.toString().split(".")[0], 10);//before
return value ? value : 0;
}
Number.prototype.after = function () {
var value = parseInt(this.toString().split(".")[1], 10);//after
return value ? value : 0;
}
用法
alert(a.before()); ///before
alert(a.after()); ///after
答案 1 :(得分:12)
before
很简单。这只是一个向下的操作。
var before = function(n) {
return Math.floor(n);
};
没有字符串处理, after
会更难。我的意思是你将如何处理after(Math.PI)
?毕竟,你不能保持一个无限位数的整数。
但是通过一些字符串处理它很容易,只是知道它不会是精确的,因为浮点数学的奇迹。
var after = function(n) {
var fraction = n.toString().split('.')[1];
return parseInt(fraction, 10);
};
答案 2 :(得分:2)
var decimalPlaces = 2;
var num = 12345.673
var roundedDecimal = num.toFixed(decimalPlaces);
var intPart = Math.floor(roundedDecimal);
var fracPart = parseInt((roundedDecimal - intPart), 10);
//or
var fractPart = (roundedDecimal - intPart) * Math.pow(10, decimalPlaces);
答案 3 :(得分:2)
播放其他答案...并且您想要一个'数字'版本..仍然最容易将其转换为字符串并解决分割功能......
function getNatural(num) {
return parseFloat(num.toString().split(".")[0]);
}
function getDecimal(num) {
return parseFloat(num.toString().split(".")[1]);
}
var a = 12345.67;
alert(getNatural(a)); ///before
alert(getDecimal(a)); ///after
答案 4 :(得分:1)
要查找点后的字符数/长度:
var a = 12345.67;
var after_dot = (a.toString().split(".")[1]).length;
var before_dot= (a.toString().split(".")[0]).length;
答案 5 :(得分:0)
不幸的是,使用数学函数无法以可靠的方式获得派系部分,因为根据所使用的Javascript引擎,经常会出现奇怪的舍入。 最好的办法是将其转换为字符串,然后检查结果是否为十进制或科学记数法。
Number.prototype.after = function() {
var string = this.toString();
var epos = string.indexOf("e");
if (epos === -1) { // Decimal notation
var i = string.indexOf(".");
return i === -1 ? "" : n.substring(i + 1);
}
// Scientific notation
var exp = string.substring(epos + 1) - 0; // this is actually faster
// than parseInt in many browsers
var mantix = n.string.substring(0, epos).replace(".", "");
if (exp >= -1) return mantix.substring(exp + 1);
for (; exp < -1; exp++) mantix = "0" + mantix;
return mantix;
}
答案 6 :(得分:0)
如果小数点后的数字是固定的,则此解决方案无需转换为字符串即可工作。
此示例显示了小数点后 2 位数字的解决方案。
小数点前:
const wholeNum = Math.floor(num);
小数点后:
let decimal = (num - wholeNum) * 100