【问题标题】:Unix BC "bc -l" equals ".8" instead of "A" , why?Unix BC "bc -l" 等于 ".8" 而不是 "A" ,为什么?
【发布时间】:2013-08-29 15:24:08
【问题描述】:

运行时bc -l

如果设置 ibase=obase=16,则要求“0.2 * 5”

它等于 0.8。为什么它不等于十六进制值 1?

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

【问题讨论】:

    标签: bash unix hex bc


    【解决方案1】:

    我认为问题在于您以十六进制进行输入,但它以十进制进行内部计算,并使用十六进制输入的长度来决定该数字应表示为多少十进制数字。因此,当您输入“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(十六进制),这是“正确”的结果。

    【讨论】:

    • 是的,看起来 bc 中的所有计算都是十进制的(而输入和输出是基于我的 ibase 和 obase 的十六进制)
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 2015-02-12
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多