如何在bash中计算100 =(100/24)* 24?

时间:2015-08-12 16:39:14

标签: bash

我尝试执行这个简单的计算,但程序总是给我不正确的结果。如果我只使用整数,那么我得到96

var=$(((100/24)*24))

即使我尝试使用bc:

var=$(bc <<< "scale=100;100/24*24")

我得到这样的东西: 99.99999999999999999999999999999999999999999999999999999999999999999 99999999999999999999999999999999984;

如何让程序计数正确?这样我可以得到与计算器相同的值吗?

1 个答案:

答案 0 :(得分:1)

这是舍入,整数(bash中为100/24 - > 4)和浮点(bc缺少&#34; round&#34;函数)的结果。有关相关信息和链接,请参阅this SO question

在这里提供一般解决方案非常困难:大多数解决方案都取决于您的确切用例,这可能不是您在问题中发布的内容(否则您可以放置​​var=100继续前进)。

  • 一种技术是重新排序问题(var=$((24*100/24))),这将保持所有操作整数。
  • 另一个是乘以一个大的偏移量(var_millionths=$((1000000*(100/24)*24)))并根据需要进行分割,这样可以保持足够的精度,以便Bash可以很好地对结果进行舍入。
  • 最后,您可以(ab)使用printf为您执行舍入步骤,因为您希望数字在基数10中为圆形(即打印时):

    printf "%.0f\n" $(BC_LINE_LENGTH=0 bc <<< "scale=100;100/24*24")