【问题标题】:Rounding up an int divided by 10 to nearest int将 int 除以 10 舍入到最接近的 int
【发布时间】:2016-09-21 13:53:54
【问题描述】:

我想将一个 int 除以 10 并得到一个最接近四舍五入的整数,所以 12 应该给 1,17 应该给 2

这是我的代码:

int BonusValue;
int Str;

BonusValue = Convert.ToInt32(Math.Round(Convert.ToDouble(Str) / 10));

这行得通吗?

【问题讨论】:

  • 试试看...另外,请查看google.com/#q=c-sharp+math.round+options
  • 好吧,您是否尝试过测试您的代码以查看它是否有效?您发现您的代码有问题吗?
  • 自己测试一下?
  • 我会测试一下,它不是非常复杂的代码的一部分,它还没有运行。
  • 由于中点舍入,你会得到令人惊讶的结果 - 2515 的输入都将导致 2。请改用 Aganju 的答案,这将分别给出 32

标签: c# math unity3d int


【解决方案1】:

是的,应该可以。

但是,如果将一半的舍入步骤(在您的情况下为 5)添加到整数会容易得多。然后你可以做简单的整数除法:

BonusValue = (Str+5) / 10

【讨论】:

  • 额外的好处:由于中点四舍五入到最接近的偶数,这不会产生令人惊讶的结果。
  • 谢谢,我将使用它——它非常简单有效。
  • 然而,对于负输入,它会产生令人惊讶的结果。如果Str-14,您将得到0 的结果。
  • 很好,@MarkDickinson - 谁想要负奖金? ;-)
  • @Aganju:我认为您对“好”的定义与我不同。 :-) 你真的想要一个将-34 舍入到-2 的舍入方法(而不是-3-4,两者都更接近-34/10)?您至少应该指出您的答案仅对非负整数有效。
【解决方案2】:

使用Mathf.RoundToInt:

Debug.Log(Mathf.RoundToInt(17f/10f));

【讨论】:

    【解决方案3】:

    这可行,但这是一种低效的方式。

    团结起来做你想做的最好的方法是使用内置的方法来做到这一点

    BonusValue = Mathf.RountToInt(Str/10f);
    

    【讨论】:

      【解决方案4】:

      它会起作用,但你需要什么圆形?检查这个:MidpointRounding Enumeration

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 2016-05-25
        • 2014-12-08
        • 2016-05-09
        • 2010-12-10
        • 1970-01-01
        • 2011-03-21
        相关资源
        最近更新 更多