Bash

bash 可以在不使用外部命令的情況下進行浮點運算嗎?

  • December 24, 2017

我讀過bash可以在不使用外部命令的情況下進行整數運算,例如:

echo "$((3 * (2 + 1)))"

不使用外部命令也可以bash進行浮點運算嗎?

不。

Bash 本身無法執行浮點運算。


這不是您要尋找的,但可能對其他人有所幫助:

備擇方案

  1. bc

bc允許浮點運算,甚至可以通過設置值將整數轉換為浮點數scale。(請注意,該scale值僅影響除法,bc但解決方法是結束任何除以 1 的公式)

$ echo '10.1 / 1.1' | bc -l
9.18181818181818181818
$ echo '55 * 0.111111' | bc -l
6.111105
$ echo 'scale=4; 1 + 1' | bc -l
2
$ echo 'scale=4; 1 + 1 / 1' | bc -l
2.0000

  1. awk

awk它本身就是一種程式語言,但很容易被用來在你的 bash 腳本中執行浮點運算,但這並不是它所能做的全部!

echo | awk '{print 10.1 / 1.1}'
9.18182
$ awk 'BEGIN{print 55 * 0.111111}'
6.11111
$ echo | awk '{print log(100)}'
4.60517
$ awk 'BEGIN{print sqrt(100)}'
10

我同時使用echopiped toawk和 aBEGIN來展示兩種方法。語句中的任何內容awk BEGIN都將在讀取輸入之前執行,但是沒有輸入或 BEGIN 語句awk將不會執行,因此您需要為其提供輸入。


  1. Perl

另一種可以在 bash 腳本中使用的程式語言。

$ perl -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(perl -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105

  1. Python

另一種可以在 bash 腳本中使用的程式語言。

$ python -c 'print 10.1 / 1.1'
9.18181818182
$ somevar="$(python -c 'print 55 * 0.111111')"; echo "$somevar"
6.111105

  1. Ruby

另一種可以在 bash 腳本中使用的程式語言。

$ ruby -l -e 'print 10.1 / 1.1'
9.18181818181818
$ somevar="$(ruby -e 'print 55 * 0.111111')"; echo "$somevar"
6.111105

引用自:https://unix.stackexchange.com/questions/412716