我有像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
我错过了什么?
当前回答
float a=3.2;
int b=(int)a; // you'll get output b=3 here;
int c=(int)a-b; // you'll get c=.2 value here
其他回答
我正在使用:
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
避免数学不精确的最好方法是转换为字符串,但要确保它是你期望的“点”格式,使用toLocaleString:
函数getDecimals(n) { //注意,maximumSignificantDigits默认为3,所以如果不更改,您的小数将被四舍五入。 const parts = n.toLocaleString('en-US', {maximumSignificantDigits: 18}).split('.') 返回的部分。长度> 1 ?数量(' 0。' +部分[1]):0 } console.log (getDecimals (10.58))
数学函数更快,但总是返回不是本机的期望值。 我发现最简单的方法就是
(3.2+'').replace(/^[-\d]+\./, '')
这取决于你以后的用法,但这个简单的解决方案也可以帮助你。
我不是说这是一个很好的解决方案,但在一些具体的情况下是可行的
var a = 10.2
var c = a.toString().split(".")
console.log(c[1] == 2) //True
console.log(c[1] === 2) //False
但这比布莱恩·m·亨特提出的解决方案需要更长的时间
(2.3 % 1).toFixed(4)
您可以使用parseInt()函数来获取整数部分,而不是使用它来提取小数部分
var myNumber = 3.2;
var integerPart = parseInt(myNumber);
var decimalPart = myNumber - integerPart;
或者你可以像这样使用正则表达式:
splitFloat = function(n){
const regex = /(\d*)[.,]{1}(\d*)/;
var m;
if ((m = regex.exec(n.toString())) !== null) {
return {
integer:parseInt(m[1]),
decimal:parseFloat(`0.${m[2]}`)
}
}
}