请注意,在处理浮点数时您必须小心一点,如果您正在测试相等性,您真的想确定一些精度,然后使用它进行比较。就像是:
if (abs(x1-x2) < 0.0001) then equal # pseudo-code
原因是计算机处理的是精度有限的二进制分数,而不是真正的数学实数。使用 scale=3 限制 bc 中的精度会产生这种效果。
我还建议不要尝试在 shell 脚本中执行此操作。并不是你不能这样做,而是你必须分叉出许多小子命令来完成棘手的工作,而且执行起来很慢,而且通常写起来很痛苦——你大部分时间都在尝试获取 shell做你想做的事,而不是写你真正想要的代码。改为使用更复杂的脚本语言;我选择的语言是 perl,但还有其他语言。像这样...
echo $var1 $var2 $total | perl -ne 'my ($var1, $var2, $tot) = split /\s+/; if ($var1/$tot == $var2/$tot) { print "equal\n"; }'
另请注意,您要除以相同的值(您的问题中的 $total),因此可以针对分子(var1 和 var2)进行整个比较,前提是 $total 为正