【问题标题】:Can't do a simple division [duplicate]不能做简单的除法[重复]
【发布时间】:2013-12-13 05:06:05
【问题描述】:

我正在为我的游戏进行响应式设计。我根据屏幕尺寸重新计算对象的位置。我正在做很好的计算,但我的函数给了我错误的结果,总是返回 0。 我需要返回值是一个 Int。

这里是代码:

public int rdnW(int a)
{
    double b;

    b = (a / 800 * 100);
    return (int)(b * Widths / 100);
}

有了断点,我看到 b 总是 = 0;在我的情况下 a = 258。谢谢

【问题讨论】:

标签: c# function xna division


【解决方案1】:

您正在执行整数除法。将其中一个值转换为 doublefloat 或将其中一个常量指定为双精度值:即 100.0 而不是 100。

例子

b = (a / 800.0 * 100.0);

【讨论】:

    【解决方案2】:

    使用

    b = ((double)a / 800 * 100);
    

    这是因为表达式被评估为integer,因为所有因子都是整数。在对表达式求值后,将其保存到 double 变量中。

    你也可以使用类似的东西:

    b = (a / 800.0 * 100);
    

    b = (a / 800 * 100.0); //in your case this will return zero because (a/800) will be evaluated as integer
    

    必须至少有一个因素是双精度才能“告诉”编译器表达式具有double 类型

    【讨论】:

    • 我认为最后一个将被评估为 (a / 800) * 100.0 这不会解决(整个)问题。
    【解决方案3】:

    您应该将 a 转换为 double,这样计算的结果就不会被四舍五入。

    b = ((double)a / 800 * 100);
    

    【讨论】:

    • 我认为您的意思是“将 a 转换为双精度”,而不是“将 a 声明为双精度”
    • 谢谢,多么精妙..
    【解决方案4】:

    因为你在这里所做的是整数除法。如果 ab 是整数并且 a < ba / b 总是给你 0 作为结果,无论你分配它或强制转换它。

    在你的事业中,a 可能小于800,所以这就是它给出0 的原因。

    .NET 有 3 种类型的划分。来自7.7.2 Division operator

    • 整数除法
    • 浮点除法
    • 小数除法

    整数除法部分;

    除法将结果向零舍入,并且绝对值 结果是小于 两个操作数的商的绝对值。

    来自/ Operator (C# Reference)

    当你将两个整数相除时,结果总是一个整数。为了 例如,7 / 3 的结果是 2。要确定 7 / 的余数 3、使用余数运算符(%)。 获取商作为有理数 数字或分数,给出被除数或除数类型 float 或 type 双倍。

    作为一种解决方案,您可以将a800 加倍;

    b = ((double)a / 800 * 100);
    

    b = (a / 800d * 100);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 2014-10-17
      • 2015-07-03
      • 1970-01-01
      相关资源
      最近更新 更多