我有像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
我错过了什么?
当前回答
避免数学不精确的最好方法是转换为字符串,但要确保它是你期望的“点”格式,使用toLocaleString:
函数getDecimals(n) { //注意,maximumSignificantDigits默认为3,所以如果不更改,您的小数将被四舍五入。 const parts = n.toLocaleString('en-US', {maximumSignificantDigits: 18}).split('.') 返回的部分。长度> 1 ?数量(' 0。' +部分[1]):0 } console.log (getDecimals (10.58))
其他回答
您还可以截断该数字
函数小数(val) { const valStr = val.toString(); const valTruncLength = String(Math.trunc(val)).length; Const dec = valStr。= valTruncLength . length ? valStr。substring(valTruncLength + 1) :“”; 返回12月; } Console.log ("decimals: ", decimals(123.654321)); Console.log ("no decimal: ", decimal (123));
我喜欢这个答案https://stackoverflow.com/a/4512317/1818723只需要应用浮点修正
function fpFix(n) {
return Math.round(n * 100000000) / 100000000;
}
let decimalPart = 2.3 % 1; //0.2999999999999998
let correct = fpFix(decimalPart); //0.3
完成负极和正极处理功能
function getDecimalPart(decNum) {
return Math.round((decNum % 1) * 100000000) / 100000000;
}
console.log(getDecimalPart(2.3)); // 0.3
console.log(getDecimalPart(-2.3)); // -0.3
console.log(getDecimalPart(2.17247436)); // 0.17247436
P.S.如果你是加密货币交易平台开发人员或银行系统开发人员或任何JS开发人员;)请在任何地方应用fpFix。谢谢!
使用1,而不是2。
js> 2.3 % 1
0.2999999999999998
我正在使用:
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
n = Math.floor(x);
remainder = x % 1;