pfn*_*sel 1 bash zsh floating-point
假设我有一个变量,我想在将其乘以 1000 后打印 5 位有效数字。zsh可以这样做:
zsh$ x=2.8026407e+00
zsh$ printf "%.5g\n" "$(( 1000*${x} ))"
zsh> 2802.6
Run Code Online (Sandbox Code Playgroud)
bash也能做到吗?
bash$ x=2.8026407e+00
bash$ printf "%.5g\n" "$(( 1000*${x} ))"
bash> bash: 1000*2.8026407e+00 : syntax error: invalid arithmetic operator (error token is ".8026407e+00 ")
Run Code Online (Sandbox Code Playgroud)
我认为没有办法让原生 bash 理解浮点运算,是吗?我知道我可以使用 eg awk,但我想知道是否bash可以这样做。
(我并不惊讶bash不能处理浮动,但zsh可以!)
bash不进行浮点运算,而是进行定点运算,其中小数点固定在零位(即整数数学)。这意味着您可以围绕它进行一些非常非常基本的计算:
$ a=1;b=3
$ echo $(( (a*1000 / b ) ))
333
Run Code Online (Sandbox Code Playgroud)
因此,1/3 到三位数是 0.333。
这是一个坏主意; 不要这样做。
在命令行上进行 FP 数学计算的方法有很多种。这里仅举两个例子:
$ python -c 'print( 1.0 / 3 )'
0.333333333333
$ echo 'scale=3; 1.0/3' | bc
.333
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8651 次 |
| 最近记录: |