答案 0 :(得分:8)
通常,有这样的问题,这是因为这个数字不能在IEEE754中完全表示 - 它最有可能被转换为0.4999999999 ...或类似于将其舍入为零的那些。
然而,0.5(1/2) 在IEEE754中完全可以表示,所以情况并非如此。
编译器可能在将文本转换为数字时出错,但我认为这不太可能。实际上,当我在VC#2010中编译并运行以下内容时:
using System;
namespace ConsoleApplication1 {
class Program {
static void Main (string[] args) {
Console.WriteLine (Math.Round (0.5, 0, MidpointRounding.AwayFromZero));
}
}
}
我按预期获得1
的输出。
所以我认为你的问题并不完整。现在可能是您的实际情况不使用0.5
的硬编码值,而是使用您相信的变量为0.5。< / p>
我对此的回答是,虽然它可能关闭到0.5(当然足够接近它的简单WriteLine
可能输出0.5),它可能是一个触摸 0.5以下,这将导致我在上面第一段中的评论再次启动。
根据您的链接,似乎Mono 2.8可能有错误。我建议寻求开发人员的支持(或者只是提出错误报告)here。
实际上,用gmcs 2.6.7在本地试过它,这绝对是一个bug。那个确切的代码编译好了,但生成了0而不是1.已经提出了bug report,并且我已经添加了我自己的信息。
答案 1 :(得分:0)
当我调试它时,这也为我返回1.0。
Math.Round(0.5, 0, MidpointRounding.AwayFromZero)