我尝试执行这个简单的计算,但程序总是给我不正确的结果。如果我只使用整数,那么我得到96
var=$(((100/24)*24))
即使我尝试使用bc:
var=$(bc <<< "scale=100;100/24*24")
我得到这样的东西: 99.99999999999999999999999999999999999999999999999999999999999999999 99999999999999999999999999999999984;
如何让程序计数正确?这样我可以得到与计算器相同的值吗?
答案 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")