首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

双精度数隐式转成整数的奇异现象

2013-09-14 
双精度数隐式转成整数的怪异现象string a1 7.70string a2 8.70double b1 0double b2 0dou

双精度数隐式转成整数的怪异现象
            string a1 = "7.70";
            string a2 = "8.70";
            double b1 = 0;
            double b2 = 0;
            double.TryParse(a1, out b1);
            double.TryParse(a2, out b2);
            int c1 = (int)(b1 * 100);
            int c2 = (int)(b2 * 100);

            Response.Write("result: " + c1 +"_" + c2);

输出结果:result: 770_869

哪位大哥大姐可以帮忙解释一下呢 隐式转换 string c
[解决办法]
这是浮点数在内存中的特殊存储导致的,8.70可能在内存中是8.69999999999999999999999,这样就会变成8.69了
[解决办法]

引用:
浮点数精度损失的问题
decimal的精度要高点,可以放这里使用,但不论它精度有多高,精度损失依然存在


decimal的精度并非高,只是decimal在内部使用十进制表示。不存在转换,所以没有精度损失。
[解决办法]
int c1 = (int)(b1 * 100);
int c2 = (int)(b2 * 100);
b1 * 100的结果是770.0
b2 * 100的结果是869.99999999999989
双精度的有效数位为15位。
后来的int强制转换,结果就是你说的那样了~

热点排行