有没有JS函数来查找小数点前后的值

我正在使用JavaScriptvalidation十进制数。 我刚刚使用NaN

var a = 12345.67是否有任何javascript函数来获取小数点前后的计数或值本身。

 before() should return 1234 after() should return 67 

请不要建议子串!

 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 

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

玩其他答案……你想要一个’数字’版本..仍然最容易将它转换为字符串并解决分裂函数…

 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 

http://jsfiddle.net/rlemon/qWtSc/1/

 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); 

要查找点后的字符数/长度:

 var a = 12345.67; var after_dot = (a.toString().split(".")[1]).length; var before_dot= (a.toString().split(".")[0]).length; 

遗憾的是,使用数学函数无法以可靠的方式获得派系部分,因为根据所使用的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; }