Bash命令行中实现带三位小数及千分位分隔的乘除运算方案及脚本优化问询
Bash命令行中实现带三位小数及千分位分隔的乘除运算方案及脚本优化问询
大家好,我最近在bash命令行做数值计算时遇到了个棘手的问题,想请教下有没有更合适的解决办法。
之前我用以下方式做乘法运算,能得到带千分位分隔的整数结果,用着挺顺手:
printf "%'3.f\n" $(((29246636)*4096))
输出结果是:119,794,221,056
如果用%'.3f格式的话,还能输出带三位小数的整数形式:
printf "%'.3f \n" $(((31200310)*4096))
结果是:127,796,469,760.000
但一涉及除法就麻烦了——我需要确保如果除法有余数的话,能准确体现出来,而不是直接丢掉小数部分。比如我试了这样的写法:
printf "%'.3f\n" $(((((125046784)*512)/1024)/64))
输出是:976,928.000
要是除法刚好整除倒还好,但如果有余数的话,bash的$((...))只会做整数运算,直接舍去小数部分,用printf输出也只会显示.000,完全看不出原本应该有分数部分,这太容易踩坑了,现在我只能转而用Ubuntu桌面计算器来做这类计算,总觉得不够方便。
我试过把除数改成64.0,结果直接报语法错误,也查过关于打印浮点数三位小数的资料,但还是不知道怎么把方案结合到我的整数乘除场景里。
后来我自己写了个小脚本叫quotrem,放在/usr/local/sbin目录下,这样在任何命令行都能调用,脚本内容是这样的:
#!/bin/bash # 脚本使用方式:quotrem a b # a和b都是整数,输出a除以b的商和余数 a=$1; b=$2; printf "a=%'3.f " $((a)) printf "b=%'3.f " $((b)) printf "a/b = %'3.f " $((a / b)) printf "with the remainder of %'3.f " $((a % b)) printf "\n"
但这个脚本还是有缺点:换一台Ubuntu机器就得重新下载,而且没有桌面图标,不能双击打开输入数值直接得到结果。想问问大家有没有办法优化这个脚本,或者有没有更合适的命令行工具/写法,能让我在bash里方便地做带小数(或余数)的乘除运算,同时还能保留千分位分隔?
备注:内容来源于stack exchange,提问作者Stephen Elliott
相关产品推荐
相关产品推荐

