将整数分成两个(几乎)相等的部分

Vas*_*ash 40 javascript math

我需要将一个整数分成两个数字.有点像除以2但我只想要整数组件,例如:

6 = 3 and 3
7 = 4 and 3
Run Code Online (Sandbox Code Playgroud)

我尝试了以下,但我不确定它是最好的解决方案.

var number = 7;
var part1 = 0;
var part2 = 0;

if((number % 2) == 0) {
    part1 = number / 2;
    part2 = number / 2;
}
else {
    part1 = parseInt((number / 2) + 1);
    part2 = parseInt(number / 2);
}
Run Code Online (Sandbox Code Playgroud)

这样做我想要的,但我认为这段代码不干净.

有更好的方法吗?

cs9*_*s95 107

只需找到第一部分并从原始数字中减去它.

var x = 7;

var p1 = Math.floor(x / 2);
var p2 = x - p1;

console.log(p1, p2);
Run Code Online (Sandbox Code Playgroud)

x奇数的情况下,p1将收到两个加数中较小的一个.您可以通过调用Math.ceil来切换它.

  • 我想你想要第一个更小/更大的时候明确地使用`Math.floor`或`Math.ceil`.`round`使它变得模棱两可. (8认同)
  • @georg这绝对值得作为答案,但如果OP想要处理花车,7将成为"3.5 3.5",而不是"4 3".我所说的是,这超出了问题的范围,而且我不确定实际回答这个问题并使现有解决方案复杂化比提出一个新问题更有益. (4认同)
  • @georg你为什么坚持改变OP的期望?有问题的代码对浮点数也不起作用,但OP也没问题("这就是我想要的") (4认同)
  • @cᴏʟᴅsᴘᴇᴇᴅ然后使用Math.ceil - 你甚至不必考虑知道它将会四舍五入,并且即使例如除数改变也仍然会向上舍入. (3认同)
  • 并且Math.ceil更短,因此如果在代码高尔夫上结束,则需要更多积分.:) (3认同)
  • @georg应该将问题标题更改为"如何将_whole_数字分成2个加数?" ;) (3认同)
  • 与通常的浮点数一样,这需要更多的关注.试试`x = 1.2` (2认同)

Sur*_*tta 38

让javascript 为你做数学.

var x = 7;
var p1 = Math.ceil(x / 2);
var p2 = Math.floor(x / 2);
console.log(p1, p2);
Run Code Online (Sandbox Code Playgroud)

  • IEEE浮点中的@EricDuminil`/2`不能导致任何整数的精度损失或舍入,可以表示为/ 2之前的浮点.它只涉及从指数部分中减去1. (7认同)

Abd*_*auf 8

您的代码可以简化一下:

var num = 7;
var p1 = Math.floor(num / 2);
var p2 = p1;

if (num % 2 != 0) {
   p1++;
}
console.log(p1, p2);
Run Code Online (Sandbox Code Playgroud)

  • 如果num是一个数字,因此num/2也是一个数字,为​​什么要使用parseInt(一个用于将字符串转换为数字的函数)?(我知道为什么,但我认为你的答案将大大有益于解释你为什么要这样做以及你依赖什么特定的parseInt才能让它发挥作用.) (6认同)
  • 老实说,`var p2 = p1;`远比调用`parseInt`两次浪费少得多. (3认同)