2011-10-12 124 views
1

我尝试下面的例子:十六进制浮点舍入

printf("%9.1a",4488.09); //Only one digits has to be printed after digital point 

的4488.09 == 1 0001 1000 1000.0001011100001010001111010111000010100011110101 二进制表示应成为0x1.1p + 12or 0x1.2p + 12?

如果必须对二进制表示或1.18 + 13表示执行舍入操作(同时打印),那么我无法撤销它吗?如果它应该执行ceil() - 8正好在十六进制范围的中间。 ..

回答

1

二进制总是可以转换为十进制而不会丢失,除非将小数位数限制为太小。如果尾数值类似于1.188170A3D70A4,并且您将printf()限制为只有1个小数位,则应该为尾数打印1.2。如果将其限制为2个小数位,则应该得到1.19。如果3,那么1.188。如果4,那么1.1881。等等。

+0

http://ideone.com/OT8bt –

1

是的,当你printf()一个9.1的数字时,你会四舍五入。

如果你不想四舍五入,你可以将低位清零。

您的错误似乎认为将出现四舍五入的部分数字,但不是整数。

也在这里田纳西州,我们不使用这个词,尾数。但我们确实使用“小数部分”