双精度数隐式转成整数的怪异现象
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
哪位大哥大姐可以帮忙解释一下呢
------解决方案--------------------这是浮点数在内存中的特殊存储导致的,8.70可能在内存中是8.69999999999999999999999,这样就会变成8.69了
------解决方案--------------------
decimal的精度并非高,只是decimal在内部使用十进制表示。不存在转换,所以没有精度损失。
------解决方案--------------------int c1 = (int)(b1 * 100);
int c2 = (int)(b2 * 100);
b1 * 100的结果是770.0
b2 * 100的结果是869.99999999999989
双精度的有效数位为15位。
后来的int强制转换,结果就是你说的那样了~