读书人

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

发布时间: 2013-09-14 13:03:22 作者: rapoo

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

读书人网 >asp.net

热点推荐