【发布时间】:2015-03-10 04:57:51
【问题描述】:
当乘以一组 int 并将结果转换为 long 时,我得到不同的答案,而不是当我乘以一组双精度并将结果转换为 long 时。例如:
int a = 5;
int b = 5;
int c = 7;
int d = 6;
int ee = 6;
int f = 8;
int g = 9;
int h = 6;
int i = 6;
int j = 4;
int k = 8;
int l = 9;
int m = 5;
long x = a * b * c * d * ee * f * g * h * i * j * k * l * m;
double aa = 5;
double ab = 5;
double ac = 7;
double ad = 6;
double aee = 6;
double af = 8;
double ag = 9;
double ah = 6;
double ai = 6;
double aj = 4;
double ak = 8;
double al = 9;
double am = 5;
long y = (long)(aa * ab * ac * ad * aee * af * ag * ah * ai * aj * ak * al * am);
谁能告诉我为什么会这样?谢谢
【问题讨论】:
-
因为
long和double是不同的东西 -
Double 和 float 不能以 100% 的精度保存任何数字,除非它是 2 的幂。相反,它们只保存 近似值..这就是为什么我们有小数
-
我建议在您的项目设置中启用溢出检查(至少对于调试版本)。
标签: c# type-conversion multiplication