49.765 是我的一系列指令的輸出。我想使用 print f 將其舍入兩位小數為 49.77。
它的代碼是什麼?
答案1
$ x=49.765
$ printf "%.2f" $(echo "$x + 0.005" | bc)
您必須使用外部指令,因為 中沒有內建舍入功能printf(1)
,且 POSIX shell 沒有內建浮點運算。
要四捨五入到最接近的小數位,請加 0.5 並截斷。要四捨五入到最接近的十分之一,請將「微移因子」除以 10,依此類推。
缺乏內建設施常常促使人們使用 Perl 之類的東西而不是 shell:
$ perl -e 'printf "%.2f", 49.765 + 0.005'
同樣的事情,但全部由一個進程處理。
答案2
您可以使用以下命令進行四捨五入。
浮點數 = 49.765; printf("%0.2f", 數字);
您應該可以得到小數點後 2 位數字。
但這只會列印,不會更新值。如果您想更改變數的值,那麼您應該使用下面的方法。
#include <math.h>
float val = 49.765;
float rounded_down = floorf(val * 100) / 100; /* Result: 49.76 */
float nearest = roundf(val * 100) / 100; /* Result: 49.77 */
float rounded_up = ceilf(val * 100) / 100; /* Result: 49.77 */
請注意,您可能需要選擇三種不同的捨去規則:向下捨去(即在兩位小數後截斷)、四捨五入到最接近的捨入和向上舍入。通常,您需要四捨五入到最接近的值。
正如其他幾個人指出的那樣,由於浮點表示的怪癖,這些舍入值可能不完全是「明顯的」十進制值,但它們將非常非常接近。
答案3
捕捉變數中“命令環”的輸出並使用printf
.
$ x=49.765
$ printf '%.2f\n' "$x"
49.76
舍入是透過數字的二進位表示形式按照「舍入到最接近的偶數」規則完成的。請理解,在大多數情況下,二進位表示並不完全等於給定的數字。