我有一個浮點數組,其中數據存儲在不同的小數點,所以有些是123.40000
,123.45000
,123.45600
...現在如果我想打印這些值在字符串中沒有0在printf()
結束,因此它們是123.4
,123.45
,123.456
,最後沒有那些0。這可能嗎?如果是這樣,怎麼樣?在printf()中的浮點格式化
8
A
回答
18
使用%克格式化:
printf("%g", 123.4000);
打印
123.4
尾隨零被除去,但不幸的是這樣是後小數點如果小數部分是零。我不知道是否真正有做你想要直接使用的是什麼的printf()的任何方式 - 我覺得這樣的事情可能是你最好的選擇:
#include <stdio.h>
#include <math.h>
void print(FILE * f, double d) {
if (d - floor(d) == 0.0) {
fprintf(f, "%g.", d);
}
else {
fprintf(f, "%g", d);
}
}
int main() {
print(stdout, 12.0);
print(stdout, 12.300);
}
0
使用%G -
打印無論是正態還是指數形式的雙重數據,無論哪一種更適合其數量級。 'g'使用小寫字母,'G'使用大寫字母。該類型與定點符號略有不同,因爲不包括小數點右側不顯着的零。另外,小數點不包含在整數中。
+0
只是一個小的查詢,如果我想刪除尾部零但想保留整數的小數點,如124.00000是123,該怎麼辦? – sfactor 2009-12-07 23:45:33
3
我不知道如何哈克這不過是:
float f = 124.000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
返回124.0
。
float f = 124.123000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
返回124.123
。
0
打印到(足夠大)緩衝區。打印緩衝區......如果緩衝區中沒有'.'
,則打印一個點。
char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');
編輯
該標準規定了#
標誌:
#結果被轉換爲``替代形式 ''。 [...]對於a, e,E,f,F,g和G轉換,轉換浮點數 的結果始終包含一個小數點字符,即使沒有數字後面跟着 。 [...]對於g和G轉換,結果不會從 中刪除尾部零。 [...]
...但你的尾隨零:(
相關問題
- 1. printf浮點值的字符串格式
- 2. C++浮點格式化
- 3. 格式化浮點值
- 4. TCL格式化浮點
- 5. 格式化浮點數
- 6. 格式化SLF4J中的浮點數
- 7. LCC的printf浮點
- 8. C printf格式化
- 9. 的Java printf的幫助中格式化
- 10. 浮點格式
- 11. printf和格式化規則
- 12. Printf格式化小數位
- 13. 我可以使printf格式像C++流一樣浮點數
- 14. 獅身人面像浮點格式化
- 15. 蟒蛇格式化浮點數
- 16. 用sprintf格式化浮點數失敗
- 17. postgreql to_char格式化一個浮點數
- 18. 格式化一個浮點數元組
- 19. Python浮點格式化最小字符
- 20. Intl格式化大型浮點數
- 21. 浮點格式化:繪製strftime
- 22. 如何格式化浮點數(Objective-C)
- 23. stringstream setprecision和浮點格式化
- 24. 浮法格式化
- 25. 在Python中格式化浮點到一定的精度
- 26. 在iOS的NSString中動態格式化浮點數
- 27. printf()和浮點錯誤
- 28. 浮點不精確printf/appendFormat
- 29. 格式浮點數
- 30. 浮點數格式
是不是一個壞主意,比較雙打? 「如果(d-地板(d)== 0.0)」 ? – himself 2013-01-15 07:14:29
@himself不,當你知道你在做什麼時很好。「絕不比較'=='的浮點數字」僅僅是一個簡單的近似值。 – 2014-06-16 19:23:47