【问题标题】:Numbers are not correctly added up [duplicate]数字加起来不正确[重复]
【发布时间】:2017-11-14 10:59:02
【问题描述】:

我想为每一天计算一些数字。实际数字无所谓,应该只是有些许不同,但一定要稳定。

所以到目前为止我做了以下事情:

now = new Date();

begin_of_week = new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() + 1);

for (idx in [0, 1, 2, 3, 4]) {
    seed = parseInt(idx)
        + begin_of_week.getFullYear() * 400,
        + begin_of_week.getMonth() * 31,
        + begin_of_week.getDate();

    // ...
}

我希望这会给我一些seed 从周一到周五一周的每一天。不过,这几天的数字不同,但我现在的数字与上周相同。

JavaScript 的类型系统对我来说是个谜。我希望所有这些都是int,它们只是被加起来。我将idx 放在链的开头还是结尾都会有所不同。而应该什么都不做的parseInt实际上改变了结果。

这里发生了什么?我怎样才能添加这些数字?

【问题讨论】:

  • 这里不需要parseInt。你应该not use for…in enumerations on arrays!
  • 哎呀,for ... in 使循环变量成为字符串。当然,这就解释了!
  • 40031 之后的逗号也是一个问题。我不知道他们是如何到达那里的,但这当然也是一个问题。

标签: javascript


【解决方案1】:

我希望这能为我一周中的每一天提供一些种子 星期一到星期五。然而,我的日子不同,但我现在 与上周的数字相同。

这是因为你的begin_of_week 整周都和你给的一样

now.getDate() - now.getDay() + 1

这基本上可以确保您的日期参数始终被一周中已经过去的天数所抵消

我希望所有这些都是 int 并且它们只是被加起来。

将值分配给种子,而不是将 seed 值增加其他值,所以这和

seed = parseInt(4)
        + begin_of_week.getFullYear() * 400,
        + begin_of_week.getMonth() * 31,
        + begin_of_week.getDate();

如果您想继续增加seed 的值,请使用+= 而不是=

【讨论】:

  • 我明确地将idx 添加到seed,以便在一周中的每一天获得不同的东西。我认为不需要+=
  • 您的 idx 值在一周中的每一天都不会变化。
  • 我的idx星期几。或许误解是这样的:我想生成五个一周内稳定的伪随机数。这五个数字适用于一周中的五个工作日。在下一个工作周,我想要五个新号码。
  • 您上面的评论比您的问题更好地描述了问题。如果您每天都想要一个新号码,请在计算中使用now 而不是begin_of_week
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2013-05-09
  • 1970-01-01
相关资源
最近更新 更多