【问题标题】:Division of Integer Parameters Returning Non Float Value返回非浮点值的整数参数的除法
【发布时间】:2017-04-21 17:46:10
【问题描述】:

我有两个整数参数,我将这些参数相除并将结果存储到浮点变量中。

float kx=(float)(img.Width / refsize.Width);

以问题所在的实例为例

img.width=2620 refsize.width=1499 

kx 变量应该通过正常的数学运算返回~1.747831887925284

但它一直将其四舍五入为整数kx=1

为什么会这样?

【问题讨论】:

  • 你必须在除法中明确指定一个浮点数,否则它将用于整数除法
  • @dcg 谢谢.....

标签: c# .net floating-point type-conversion


【解决方案1】:

这归结为操作顺序

float kx=(float)(img.Width / refsize.Width);

首先评估

img.Width / refsize.Width

然后将结果(即整数 1)转换为浮点数。

要获得预期的结果,请在除法之前将两个宽度都转换为浮点数(从技术上讲,您可以转换其中一个,编译器将提升另一个,但我更愿意明确表示。您永远不知道谁将维护代码年路)。

float kx=(float)img.Width / (float)refsize.Width;

【讨论】:

    【解决方案2】:
    float kx=(img.Width / (float)refsize.Width);
    

    这是因为你将两个整数相除,结果是你转换为浮点数的整数

    【讨论】:

      【解决方案3】:

      这是因为您首先将整数除以整数或 (DivideByZeroException)。然后将整数结果转换为float

      试试float kx = (((float)img.Width)/refsize.Width);

      【讨论】:

        【解决方案4】:

        由于括号有优先权,所以整数除以整数得到结果 1。你应该写

        float kx = (float)img.Width / (float)refsize.Width;
        

        得到正确的结果。

        【讨论】:

          猜你喜欢
          • 2017-05-06
          • 1970-01-01
          • 1970-01-01
          • 2022-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-26
          • 2011-04-16
          相关资源
          最近更新 更多