Javascript 是否有任何JS函数来查找小数点前后的值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7881319/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Is there ay JS function to find value before and after decimal point
提问by user987880
I am validating a decimal number using JavaScript.
Am just using NaN
我正在使用 JavaScript 验证十进制数。我只是在使用NaN
var a = 12345.67 Is there any javascript function to get the count or the value itself before and after decimal point .
var a = 12345.67 是否有任何 javascript 函数来获取小数点前后的计数或值本身。
before() should return 1234
after() should return 67
Please dont suggest a substring!
请不要建议子字符串!
回答by John Hartsock
var a = 12345.67;
alert(a.toString().split(".")[0]); ///before
alert(a.toString().split(".")[1]); ///after
Here is a simple fiddle http://jsfiddle.net/qWtSc/
这是一个简单的小提琴http://jsfiddle.net/qWtSc/
zzzzBov's suggestion is this
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;
}
Usage
用法
alert(a.before()); ///before
alert(a.after()); ///after
回答by Alex Wayne
before
is easy. It's just a round down operation.
before
简单。这只是一个舍入操作。
var before = function(n) {
return Math.floor(n);
};
after
is harder without string processing. I mean how would you handle after(Math.PI)
? You can't hold a integer with an infinite number of digits after all.
after
没有字符串处理更难。我的意思是你会怎么处理after(Math.PI)
?毕竟你不能持有一个无限位数的整数。
But with some string processing it's easy, just know it won't be exact due to the wonders of floating point math.
但是通过一些字符串处理很容易,只要知道由于浮点数学的奇迹,它不会是精确的。
var after = function(n) {
var fraction = n.toString().split('.')[1];
return parseInt(fraction, 10);
};
回答by rlemon
Playing off of other answers... and you wanted a 'numeric' version.. still easiest to convert it to a string and work off the split function...
播放其他答案......你想要一个“数字”版本......仍然最容易将其转换为字符串并处理拆分功能......
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
回答by evilone
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);
回答by T.Todua
To find the count/length of characters after dot:
要查找点后的字符数/长度:
var a = 12345.67;
var after_dot = (a.toString().split(".")[1]).length;
var before_dot= (a.toString().split(".")[0]).length;
回答by MaxArt
Unfortunately there's no way to get the factional part in a reliable way using math functions, because pretty odd roundings often occur, depending on the Javascript engine used. The best thing to do is to convert it to a string, and then checking if the results is in decimal or scientific notation.
不幸的是,没有办法使用数学函数以可靠的方式获得派系部分,因为经常发生非常奇怪的四舍五入,这取决于所使用的 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;
}