跑步时bc -l
如果设置 ibase=obase=16,则要求“0.2 * 5”
它等于 0.8。为什么它不等于十六进制值 1?
我最初在这里问这个(http://bit.ly/17o7RcK)。
我认为问题在于您正在以十六进制进行输入,但它正在以十进制进行内部计算,并使用十六进制输入的长度来决定应将数字表示为多少个十进制数字。因此,当您输入“0.2”(十六进制)时,它会将其转换为最接近的 1 位十进制数,即 0.1(十进制)。将其乘以 5,得到 0.5(dec) = 0.8(hex)。
你可以通过强制它使用更多的十进制数字来看到这一点。如果你执行“0.20 * 5”,它会将 0.20(十六进制)转换为 0.12(十进制),将其乘以 12 得到 0.60(十进制),四舍五入为 0.99(十六进制)作为输出。如果您执行“0.200 * 5”,它将 0.200(十六进制)转换为 0.125(十进制),乘以 5 得到 0.625(十进制),转换为 0.A00(十六进制),这是“正确”的结果。
0.2(十进制)--> 0.1(十六进制)
0.5(十进制)-> 0.8(十六进制)
所以,我相信,正在发生的是:
十六进制输入 (0.1 * 5),将以十进制输出为 0.5(以 10 为底),以十六进制(以 16 为底)输出为 (0.8)