double dou = 20.4*100;
int xxx = (int)dou;
上述两行代码,无论在C/C++还C#中, 最后打印的结果为dou=2040;xxx=2039;
且 dou.tostring(“0.00000”)(结果为2040.00000)等精度不达到很大的时候(比如取小数点后13位)(结果为2039.9999999999998),是不会显示正确值的.愿意在于:
第二行的(int)为舍弃转换,无论小数点后面事多少都会被舍弃。
如果想精确的转换,需要两步转换 以下方式都可以:
Convert.ToInt32(dou);//两步转换
Math.Round(dou);//四舍五入到最接近的整数
((int)(dou*1000))/10;//缩小误差
int xxx = (int)dou;
上述两行代码,无论在C/C++还C#中, 最后打印的结果为dou=2040;xxx=2039;
且 dou.tostring(“0.00000”)(结果为2040.00000)等精度不达到很大的时候(比如取小数点后13位)(结果为2039.9999999999998),是不会显示正确值的.愿意在于:
第二行的(int)为舍弃转换,无论小数点后面事多少都会被舍弃。
如果想精确的转换,需要两步转换 以下方式都可以:
Convert.ToInt32(dou);//两步转换
Math.Round(dou);//四舍五入到最接近的整数
((int)(dou*1000))/10;//缩小误差
![](http://imgsrc.baidu.com/forum/w%3D580/sign=6e6b8893b6b7d0a27bc90495fbef760d/fc1cea50352ac65cd3678252fff2b21192138ac9.jpg?v=tbs)