Unix BC“bc -l”等于“.8”而不是“A”,为什么?

时间:2013-08-29 15:24:08

标签: bash unix hex bc

运行bc -l

如果你设置ibase = obase = 16,那么请求“0.2 * 5”

等于.8。为什么它不等于十六进制值,1?

我最初在这里问了这个问题(http://bit.ly/17o7RcK)。

2 个答案:

答案 0 :(得分:2)

我认为问题在于您正在以十六进制进行输入,但是它以十进制进行内部计算,并使用十六进制输入的长度来确定该数字应该表示的小数位数。因此,当您输入“0.2”(十六进制)时,它会将其转换为最接近的1位十进制数,0.1(十进制)。乘以5,得到0.5(dec)= 0.8(十六进制)。

你可以通过强制它使用更多的十进制数字来看到这一点。如果你做“0.20 * 5”,它将0.20(十六进制)转换为0.12(十进制),乘以12得到0.60(十进制),其输出为0.99(十六进制)。如果你做“0.200 * 5”,它将0.200(十六进制)转换为0.125(十进制),乘以5得到0.625(十进制),转换为0.A00(十六进制),这是“正确的”结果。

答案 1 :(得分:0)

0.2(十进制) - > 0.1(十六进制)

0.5(十进制) - > 0.8(十六进制)

所以,我相信,正在发生的事情是:

十六进制输入(0.1 * 5),以十进制(基数为10)输出为0.5,以十六进制输出为(0.8)(基数为16)