【问题标题】:Spliting a number into equal parts and Add it together to get the same number将一个数字分成相等的部分并将其相加得到相同的数字
【发布时间】:2017-10-27 12:01:32
【问题描述】:

我需要在 c# 中实现一个逻辑,因为我需要拆分并将其添加到一起以获得相同的值。

例如:

1.0/6.0442137639369475 = 0.16544749061764519

当我添加时

0.16544749061764519 + 0.16544749061764519

使其 1.0 根本无法正常工作

0.99268494370587

不完全是 1.0。

我不确定我错过了什么...?

【问题讨论】:

  • “将一个数字分成相等的部分”到底是什么意思?
  • 请显示至少 6 个示例输入和输出,以明确您的期望。
  • 1.0 is not working at all it comes as 0.99268494370587 not 1.0 exactly. 这是指什么?听起来你可能已经有一些代码了?如果是这样,请在帖子中包含您的代码。
  • 0.16544749061764519 + 0.16544749061764519 是 0.33089498123529038 为什么你应该得到 1?
  • 当您将 0.16544749061764519 添加到自身... 6.0442137639369475[...] 次时,它将等于 1.0。

标签: c# split numbers decimal


【解决方案1】:

尝试使用更精确的数据格式。尝试使用双倍。如果这还不够精确,我怀疑,您仍然可以搜索更精确的实现。

【讨论】:

  • 当操作因 0.16544749061764519 + 0.16544749061764519 不 = 1.0 这一事实而困扰时,我不确定精度是否是问题。
  • 通过他使用的标签,我认为他使用的是十进制格式并试图将一个数字除以 x。然后他试图将结果相加 x 次,结果应该是他除以 x 的值。
  • 那么,您认为他将 0.16544749061764519 添加到自身 6.0442137639369475 次而不是 0.16544749061764519 + 0.16544749061764519 ? :-)
  • @spodger 不,他加了 6 次... :-( 这正好是他的 0.99... 我不知道预期的数学应该有什么意义
  • @casiosmu 是的,确实如此。不过,我仍然不太清楚问题是什么。 :-)
【解决方案2】:

如果我猜你的问题是正确的,你想做以下数学:

c=a/b

d=c+c+c+... n 次直到a==d

这仅在您使用整数表示 ab 时有效,而您的实数 6.0442137639369475 因为 b 它不能(数学定律 afaik)。

顺便说一句:

您的除法结果0.16544749061764519 已四舍五入!正确的结果是0.16544749061764518326。 所以你可能需要另一种数据类型,正如已经指出的那样。

【讨论】:

  • 即使我添加这些值 0.16544749061764518326,结果也是 0.99268494370587113,不完全是 1.0
  • 当然不是,永远不会,因为如果你把它加起来,它在数学上与乘以 integer 数字是一样的,而原来的除法器不是整数
猜你喜欢
  • 2015-05-23
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
相关资源
最近更新 更多