【问题标题】:Round Up a double to int将 double 向上舍入为 int
【发布时间】:2018-10-07 03:52:51
【问题描述】:

我有一个来自 int/int 的数字(“double”)(例如 10/3)。

Approximation by Excess 并将其转换为 C# 上的 int 的最佳方法是什么?

【问题讨论】:

  • 什么是“过度近似”?
  • 嗯...也许我不知道如何用英语称呼它? :) 好吧,如果你有 0.2->1; 0.8->1...等等...“舍入”到下一个整数?
  • 你的意思是(int)Math.Ceiling(x)
  • 哦...它是围捕!对不起,谢谢:)
  • 应该 -1.5 舍入到 -1 还是 -2?

标签: c# math double int approximation


【解决方案1】:

你问的是System.Math.Ceiling吗?

Math.Ceiling(0.2) == 1
Math.Ceiling(0.8) == 1
Math.Ceiling(2.6) == 3
Math.Ceiling(-1.4) == -1

【讨论】:

  • Math.Ceiling(-1.4)==-2 -- 那是什么语言?告诉我它的名字,这样我就可以像躲避瘟疫一样避开它。
  • 糟糕,我搞砸了。我查了一下,但我看错了这个例子。
  • @HighPerformanceMark - 好吧,在 C# 表达式中“Math.Ceiling(-1.4)==-2”是正确的,基本上返回 false ;-)
  • 看看 Math.Ceiling 如何返回小数而不是 int,然后不,但 OP 出于某种原因接受了这个作为答案。
【解决方案2】:
int scaled = (int)Math.Ceiling( (double) 10 / 3 ) ;

【讨论】:

  • 我认为您需要对其进行强制转换才能使其正常工作..即int scaled = (int)Math.Ceiling( (double 10 / 3 );
【解决方案3】:

通过“过量近似”,我假设您正在尝试“四舍五入”双精度类型的数量。所以,@Doug McClean 的“天花板”方法效果很好。

这里有一个注释: 如果你从double x = 0.8; 开始,然后通过(int)x; 进行类型转换,你会得到0。或者,如果你执行(int)Math.Round(x);,你会得到1。 如果你从double y = 0.4; 开始,然后通过(int)y; 进行类型转换,你会得到0。或者,如果你执行(int)Math.Round(y);,你会得到0

【讨论】:

    【解决方案4】:

    考虑 2.42 ,您可以说它是 242/100 顺便说一句,您可以将其简化为 121/50 。

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 2015-01-22
      • 2017-03-04
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2014-06-15
      相关资源
      最近更新 更多