使用 printf 將 49.765 舍入為 49.77?

使用 printf 將 49.765 舍入為 49.77?

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

舍入是透過數字的二進位表示形式按照「舍入到最接近的偶數」規則完成的。請理解,在大多數情況下,二進位表示並不完全等於給定的數字。

相關內容