printf%.3f和bc舍入行为之间的差异

tla*_*tor 5 bash printf bc

好的,这是一个黑客问题(https://www.hackerrank.com/challenges/bash-tutorials---arithmetic-operations).基本上,输入是一个算术表达式,我应该打印出格式化的答案(3位小数).我一开始就尝试过这个

read exp
echo "scale = 3; $exp" | bc -l
Run Code Online (Sandbox Code Playgroud)

它通过了几次测试,但不是第一次.

5+50*3/20 + (19*2)/7答案是,17.929但我的代码打印出来17.928.我试过这个代码

read exp  
printf "%.3f\n" `echo $exp | bc -l`
Run Code Online (Sandbox Code Playgroud)

注意:回声部分应该是反引号,但我把''不要与块引号混淆.所有测试都通过了 那有什么区别?

cma*_*ter 5

两者不同的原因是bc总是切断数字而不是四舍五入.I. e.echo "scale = 3 ; 8/9" | bc产生0.888而不是正确舍入的0.889.

您的测试用例评估为17.928571429,用您的printf方法舍入到17.929 ,但用该bc方法切换到17.928 .