日期:2014-05-17  浏览次数:20542 次

双精度数隐式转成整数的怪异现象
            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强制转换,结果就是你说的那样了~