Aco*_*orn 5 .net mono rounding unity-game-engine
为什么这会导致0而不是1?
Math.Round(0.5, 0, MidpointRounding.AwayFromZero)
Run Code Online (Sandbox Code Playgroud)
这是一个例子:http://ideone.com/ayMVO
通常,有这样的问题,这是因为这个数字不能在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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了1
预期的输出.
所以我认为你的问题不完整.现在可能是您的实际情况不使用硬编码值,0.5
而是使用您认为为0.5 的变量.
我的回答是,虽然它可能接近 0.5(当然足够接近WriteLine
它可能输出0.5),但它可能低于 0.5,这将导致我在上面第一段中的评论再次踢在.
根据您的链接,似乎Mono 2.8可能有错误.我倒是建议从开发商寻求支持(或只是提高bug报告)在这里.
实际上,用gmcs 2.6.7在本地试过它,这绝对是一个bug.确切的代码编译好了,但生成0而不是1. 已经提出了一个错误报告,我已经添加了自己的信息.
归档时间: |
|
查看次数: |
4348 次 |
最近记录: |