我有像3.2和1.6这样的浮点数。
我需要把这个数分成整数部分和小数部分。例如,3.2的值将被分成两个数字,即3和0.2
获取整数部分很简单:
n = Math.floor(n);
但是我在计算小数部分时遇到了麻烦。 我试过了:
remainder = n % 2; //obtem a parte decimal do rating
但它并不总是正确工作。
前面的代码有以下输出:
n = 3.1 // gives remainder = 1.1
我错过了什么?
我有像3.2和1.6这样的浮点数。
我需要把这个数分成整数部分和小数部分。例如,3.2的值将被分成两个数字,即3和0.2
获取整数部分很简单:
n = Math.floor(n);
但是我在计算小数部分时遇到了麻烦。 我试过了:
remainder = n % 2; //obtem a parte decimal do rating
但它并不总是正确工作。
前面的代码有以下输出:
n = 3.1 // gives remainder = 1.1
我错过了什么?
当前回答
语言独立方式:
var a = 3.2;
var fract = a * 10 % 10 /10; //0.2
var integr = a - fract; //3
注意,它只对分数长度为一个的数字正确)
其他回答
我正在使用:
var n = -556.123444444;
var str = n.toString();
var decimalOnly = 0;
if( str.indexOf('.') != -1 ){ //check if has decimal
var decimalOnly = parseFloat(Math.abs(n).toString().split('.')[1]);
}
输入:-556.123444444
结果:123444444
你可以简单地使用parseInt()函数来帮助,例如: 令decimal = 3.2; let remainder = decimal - parseInt(decimal); document . write(剩余部分);
如果精度很重要,并且您需要一致的结果,这里有一些命题,它们将以字符串形式返回任何数字的小数部分,包括前导的“0.”。如果你需要它作为一个浮点数,只需在最后添加var f = parseFloat(result)。
如果小数部分等于零,则返回"0.0"。不测试Null, NaN和未定义的数字。
1. String.split
var nstring = (n + ""),
narray = nstring.split("."),
result = "0." + ( narray.length > 1 ? narray[1] : "0" );
2. String.substring, String.indexOf
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = "0." + (nindex > -1 ? nstring.substring(nindex + 1) : "0");
3. Math.floor, Number.toFixed, String.indexOf
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = ( nindex > -1 ? (n - Math.floor(n)).toFixed(nstring.length - nindex - 1) : "0.0");
4. Math.floor, Number.toFixed, String.split
var nstring = (n + ""),
narray = nstring.split("."),
result = (narray.length > 1 ? (n - Math.floor(n)).toFixed(narray[1].length) : "0.0");
这是一个jsPerf链接:https://jsperf.com/decpart-of-number/
我们可以看到,命题2是最快的。
使用1,而不是2。
js> 2.3 % 1
0.2999999999999998
这个函数将浮点数拆分为整数,并以数组形式返回:
函数拆分数(数) { num = (“”+num).match(/^(-?[0-9]+)([,.][0-9]+)?/)||[]; 返回 [ ~~num[1], +(0+num[2])||0 ]; } console.log(splitNumber(3.02)); [ 3, 0.2 ] console.log(splitNumber(123.456));[ 123, 0.456 ] console.log(splitNumber(789)); [ 789, 0 ] console.log(splitNumber(-2.7)); [ -2, 0.7 ] console.log(splitNumber(“test”)); [ 0, 0 ]
你可以将它扩展为只返回现有的数字,如果不存在数字则返回null:
函数拆分数(数) { num = (“”+num).match(/^(-?[0-9]+)([,.][0-9]+)?/); 返回 [ num ? ~~num[1] : null, num && num[2] ? +(0 + num[2]) : null ]; } console.log(splitNumber(3.02)); [ 3, 0.02 ] console.log(splitNumber(123.456));[ 123, 0.456 ] console.log(splitNumber(789)); [ 789 空 ] console.log(splitNumber(-2.7)); [ -2, 0.7 ] console.log(splitNumber(“test”)); [ 空,空 ]