编辑3:实际答案。
两个错误的假设导致问题突然出现:
a)浮点数的隐式转换是加倍,而不是浮点数。这解释了两种操作之间的区别。
b)不要相信调试器。正如Servy指出的那样(在用棍子戳了一下之后)调试器使用了ToString(),正如他所说的显然是隐式舍入。没有二进制精确表示的浮点值将显示为四舍五入。有人可能会争论这个,我认为这是邪恶的。
Edit2:接受的欺骗:Strange behavior when casting a float to int in C#
谢谢Nolonar。其他人应该在发布前阅读实际问题。
编辑:这不是真的重复,实际上对所谓的重复的答案只是指出我为什么感到困惑......我想我应该让自己更清楚......
问题是,
a)为什么(61.1 * 10)产生不同的结果(61.1f * 10)[假设编译器优化在这里起作用]?
b)为什么下面例子中的第二行在调试器输出中显示为“621.0”,打印时等等 - 当转换为int后显然更接近620.9~? [假设VS调试器“监视”功能在这里格式化魔法]
好的,所以这种情况不会经常发生在我身上,但我在这里基本上对于看似简单的事情感到困惑(其中存在我的问题,假设花车和演员是一件简单的事......)
我的意思是,我知道花车是如何工作的。但这远远不是精确限制,可能是非关键操作?
我猜测编译器优化与标题中的两种情况有关,产生不同的结果,但实际情况是在运行时:
float x = 62.1
x*10 // == 621.0
(int)(x*10) // == 620
我是否正确假设621.0如图所示真的更像620.99999999999999999999999999999998并因此在演员之后得到截断?
在这种情况下,我想我应该责怪VS“观看”功能..