C#错误从double转换为int32
using NUF = NUnit.Framework; [NUF.Test]public void DifferentCastingTest() { NUF.Assert.That((int)0.499999D,NUF.Is.EqualTo(0)); NUF.Assert.That((int)0.500000D,NUF.Is.EqualTo(0)); // !!! row 1 NUF.Assert.That((int)1.499999D,NUF.Is.EqualTo(1)); NUF.Assert.That((int)1.500000D,NUF.Is.EqualTo(1)); // !!! row 2 NUF.Assert.That(System.Convert.ToInt32(0.499999D),NUF.Is.EqualTo(0)); NUF.Assert.That(System.Convert.ToInt32(0.500000D),NUF.Is.EqualTo(0)); // !!! NUF.Assert.That(System.Convert.ToInt32(1.499999D),NUF.Is.EqualTo(1)); NUF.Assert.That(System.Convert.ToInt32(1.500000D),NUF.Is.EqualTo(2)); //!!! row 3 } 通过转换和Convert.ToInt32(参见第2行和第3行)以不同方式转换相同的double值(1.5D),并且在不同模式下舍入两个具有相同尾数(0.5和1.5)的double(参见第1行和第2行) . 解决方法
不,这是记录在案的行为.
Convert.ToInt32(double) 向上或向下舍入一个数字,中间点向四舍五入到均匀:
从C#3规范的第6.2.1节开始,铸造总是向零舍入(例如,1.8轮到1)
请注意,这不仅仅是关于银行家的四舍五入:它是关于一般的舍入:(int)0.9和Convert.ToInt32(0.9)之间存在差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Swift过滤基于另一个Bool数组的其他数组
- C#应用程序 – 降低CPU使用率
- c# – DllImport而不是慢的Assembly.LoadFrom
- Cocos2d-x 3.2 大富翁游戏项目开发-第十五部分 升级地块
- Magento config.xml system.xml adminhtml.xml
- 利用正则表达式统计某个某个文件夹下所有java文件的 空格行
- 未能加载文件或程序集“System.Data.SQLite.DLL”或它的某一
- vb6 – 如何将VB 6.0中的Application.PrevInstance转换为VB
- C++ stack(STL stack)用法详解
- c# – 无法修改Dictionary的返回值,因为它不是变量