小编Art*_*zar的帖子

简单浮点计算出错

我遇到了麻烦:

int q = 150;
float s = 0.7f;
float z = q*s;
int z1 = (int) (q*s);
int z2 = (int) z;
Run Code Online (Sandbox Code Playgroud)

这导致了

  • z1int与价值104
  • z2int与价值105

有谁能解释一下?我不明白这些结果.


为了避免关闭,我(RenéVogt)添加了这些信息:

  • q*s得到一个float105.0f(或者可能104.999999,但字符串表示最终为105).
  • 所以zfloat105

现在的问题是,为什么会(int)z产生结果105,但(int)(q*s)结果104呢?我可以在我的机器上重现这个(i7,Win10,VS2015,.NET4.6.1)


和IL代码:

// Initialisation
// q = 150
ldc.i4 0x96  
stloc.0
// s = 0.7f
ldc.r4 0.69999999 
stloc.1 …
Run Code Online (Sandbox Code Playgroud)

c# floating-point

4
推荐指数
1
解决办法
147
查看次数

标签 统计

c# ×1

floating-point ×1