簡體   English   中英

有沒有辦法自動 printf 浮點數到它的小數位數?

[英]Is there a way to automatically printf a float to the number of decimal places it has?

我編寫了一個程序來顯示浮點數到適當的小數位數:

#include <stdio.h>

int main() {
    printf("%.2f, %.10f, %.5f, %.5f\n", 1.27, 345.1415926535, 1.22013, 0.00008);
}

是否有任何類型的轉換字符,例如%.(however many decimal places the number has)f還是必須手動設置?

有沒有辦法自動 printf 浮點數到它的小數位數?

使用"%g" "%g"去掉尾隨的零位。

...除非使用 # 標志,否則將從結果的小數部分中刪除任何尾隨零,如果沒有剩余小數部分,則刪除小數點字符。 C17dr § 7.21.6.1 8。

所有有限浮點值都可以用十進制精確表示 - 有些需要很多數字才能精確打印。 <float.h>中的DBL_DECIMAL_DIG (通常為 17 個)有效數字就足夠了 - 很少需要更多。

傳入一個精度來鼓勵足夠的output,但不要太多。

請記住,像0.00008這樣的值在典型的二進制浮點double中並不完全編碼,但是使用了一個附近的值,例如8.00000000000000065442...e-05

printf("%.*g\n", DBL_DECIMAL_DIG, some_double);

printf("%.17g, %.17g, %.17g, %.17g\n", 1.27, 345.1415926535, 1.22013, 0.00008);
// 1.27, 345.14159265350003, 1.2201299999999999, 8.0000000000000007e-05

DBL_DIG (例如 15)可能更好地滿足 OP 的目標。

printf("%.15g, %.15g, %.15g, %.15g\n", 1.27, 345.1415926535, 1.22013, 0.00008);
// 1.27, 345.1415926535, 1.22013, 8e-05

Function打印double精度 - 可能需要 100 位數字。

sprintf()可以幫助你
根據我的經驗,沒有直接的方法可以做到這一點
這是一個簡單的算法來幫助你解決這個 function

munber = float/double input
n = number of decimal places in float/double
char format[999];
sprintf(format ,"%%.%df" ,n);
printf(format, number);

sprintf就像printf但不是寫入stdoutsprintf寫入字符串。

現在,您只能在精度之后找到位數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM