55555555 从 string 到 double 再到 float 后变成了 55555556,哪位大佬给解释一下原因?
我想问的是为啥 str 到 double 到 float 跟直接 double 到 float 会有差。 现在发现是个乌龙,同事发给我的代码两边5的个数不一样!
string str = "55555555";
double x = double.Parse(str);
float y = (float) x;
double x1 = 5555555;
float y1 = (float)x1;
于是后面那个没损失精度 我运行前应该数一下到底有几个 5 的 /捂脸。
1
sun1991 2017-09-18 15:03:55 +08:00
精度损失吧, 正常的现象. 不要用 float.
|
2
ryd994 2017-09-18 15:12:30 +08:00 via Android
单精度浮点只有 7 位有效数字( 24 位二进制)
|
3
lommo 2017-09-18 15:15:52 +08:00
少用 float 就好了
|
4
VShawn OP |
5
LMkillme 2017-09-18 15:17:12 +08:00
IEEE754 标准
|
7
flyingghost 2017-09-18 15:22:08 +08:00
|
8
hjc4869 2017-09-18 15:24:30 +08:00 via Android
怎么天天都有人发这种问题,上周是 Java 和 JS,这周又冒出 .NET ,好好学一下计算机相关专业的本科课程会死吗
|
9
sun1991 2017-09-18 15:28:06 +08:00
double x = 55555555;
float y = (float)x; Console.WriteLine(y); output: 5.555556E+07 所以在我的机器上, 输出结果是一样的. |
11
VShawn OP @hjc4869 得了吧,谁不知道这是精度转换的问题啊,我问的是为啥 str 到 double 到 float 跟直接 double 到 float 会有差。
现在发现是个乌龙了,我运行前应该数一下到底有几个 5 的。 |