积极答复者
浮点转换双精度浮点的问题

问题
-
代码是这样的
float ff = 0.09f;
double dd = (float)ff;
Console.WriteLine(dd);
//结果是0.0900000035762787
Console.ReadLine();关于这一段代码我验算的时候发现怎么算都算不出这个0.0900000035762787的结果...
我的验算步骤如下,还希望知道的朋友说一下错在哪里..
首先0.09装换成二进制如下
0.00010111000010100011110101110000....(循环)
然后将这个二进制小数点移位并截取24位
1.01110000101000111101011(<-24位) 1(<-25位是1,所以要进位)最后得到
1.01110000101000111101100
去掉最前端的1将后面的23位储存到单精度浮点数32bit内存的最后22~0位中..(关于前面的31~23位这里无关紧要就不写出来了)
01110000101000111101100 (这个就是储存在单精度浮点数32bit内存的最后22~0位中的数值)
现在问题来了~
将这个转换成双精度那么就要先还原
前端补1
1.01110000101000111101100
小数点左移4位
0.000101110000101000111101100
问题在这里了。这个值..转换成双精度浮点数..
我不论是取00010111000010100011111(23位)去还原..还是取000101110000101000111101100(27位)去还原
最后的结果都不会是0.0900000035762787
我用(都转化成十进制之后除)
00010111000010100011111除以23个1,
或者用
000101110000101000111101100除以27个1
最后结果都不对..
不知道这是为什么?
还希望知道的朋友帮看一下~谢谢了..