如何在JavaScript中将商作为整数和余数作为浮点数获取

29

在我的计算器上,当我进行18/7运算时,得到的结果是2.5714285714285714285714285714286。从我极其有限的数学技能来看,2是商数,.5714285714285714285714285714286 是余数。

我该如何在JavaScript中对此进行建模?

谢谢!


5
余数不是4吗?18%7 === 4 - elclanrs
1
也许余数不是正确的名称。我想要那个浮点数位。 - Sebastian Patten
名称将是商的小数部分,而不是商的整数部分。如果你想知道,余数值为4来自于7 * .5714285714285714285714285714286。 - Jesse Chisholm
9个回答

53
var floatingPointPart = (18/7) % 1;
var integerPart = Math.floor(18/7);

10
为什么不使用 Math.trunc 呢?这样它也可以处理负数。 - letmaik
是的,Math.floor 会将其向负数端靠近,因此 -3.3 变成了 -4,而 Math.trunc 则将其变为 -3(按照截断的预期舍弃小数)。公平地说,这个答案是在 ES6 在2015年成为标准之前做出的... 在此处查看更多关于 Math.trunc 的信息:https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-math.trunc - CyberMew

23

Math.floor存在一个问题,在处理负数时会将结果向错误的方向舍入,更好的方法是使用位运算来获得整数商。

var quot = ~~(num/num1)

希望这对你有用!


2
全都是因为按位取反运算符强制将其转换回整数。 :) 真喜欢它! - Jesse Chisholm
3
需要小心处理这个问题,因为它只适用于绝对值小于2^31的整数。对于大于2^31的数字,将会得到意想不到的结果(按位运算符 解释了在应用按位运算符之前,具有超过32位二进制表示的数字如何被截断)。 - user2314737

10
var rawQuotient = 18/7;
var remainder = rawQuotient % 1;
var quotient = rawQuotient - remainder;
在大部分数学中,通常没有必要区分整数和分数部分,特别是考虑到整个数可以表示为一个分数(18/7),一个实数或者整数和分数的混合形式(2又4/7)。但是在编程、工程或其他相关领域中,需要明确划分二者,但商仍然包含整数和分数的全部内容,无论你如何选择表示它。

这个(使用简单算术)答案比依赖于 Math 库的被接受答案更好。 - Curious
在这里,商可能会因余数而产生舍入误差。 - Ethan

5

我们可以只使用 /% 运算符来进行简单的数学运算。

将“num1”作为第一个值,将“num2”作为第二个值。则:

var Quotient = (num1 - (num1 % num2)) / num2;

var FloatingPoint = (num1 % num2) / num2;

我喜欢这个答案比被接受的答案更好。 - Danish ALI

2

2是商(或结果的整数部分),4是余数,4/7是结果的浮点数部分,这是OP所请求的。

var result = (18/7);
var integerPart = Math.floor(result);
var floatingPointPart = result - integerPart;

整数部分和小数部分是请求的值。

1
var decimals = float - (float | 0);

0

可以使用整数除法模(%)运算符找到商和余数。

let quotient = 18n / 7n;
let remainder = 18 % 7;

console.log(`${quotient}, ${remainder}`);

浮点数可以转换为大整数:

let dividend = 18;
let divisor = 7;
let quotient = BigInt(dividend) / BigInt(divisor);
let remainder = dividend % divisor;

console.log(`${quotient}, ${remainder}`);

或者使用 Math.trunc

let quotient = Math.trunc(18 / 7);
let remainder = 18 % 7;

console.log(`${quotient}, ${remainder}`);


-1
在十进制数2.5714285714285716中, ,也是整数部分,为2, 而小数/分数部分为0.57142857142857160.5714285714285716, 但实际上,余数为4.000000000000002或4。

let decimal = 18 / 7;
let quotient = ~~decimal;
let dec_remainder = decimal - quotient;
let dec_remainder0 = decimal % 1;
let remainder = dec_remainder * 7;
let remainder0 = 18 % 7;

document.body.innerHTML = "In the decimal number "+decimal+",<br/>
the quotient, which also is the whole part, is "+quotient+"<br/>
and the decimal/fractional part is "+dec_remainder+ " or " + dec_remainder0 + "<br/>
but actually, the remainder is "+remainder+" or "+remainder0 ;
<!DOCTYPE html>
<html>
<body>
</body>
</html>

你可以用多种方法确定商。


-2

实际上,2是商,4/18是余数。

Math.divideby= function(d, dby){
    var q= Math.floor(d/dby), r= d-(q*dby);
    return r== 0? q:q+' and '+r+'/'+d;
}

Math.divideby(18,7)

/* 返回值:(字符串)*/

2和4/18


这是不正确的。2是商,但4是余数。 - Damien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接