2012-05-09 51 views
1

可以使用什麼單一格式的字符串來打印0.0,1.0,0.025?例如教:要打印的C/C++單一格式說明符0.0,1.0,0.025

float vals[3] = { 0.0f, 1f, 0.025f }; 

for(int i=0; i < 3; i++) 
    printf("%g\n", vals[i]); 

所需的輸出:

0.0 
1.0 
0.025 

而是得到:

0 
1 
0.025 

嘗試了各種寬度說明和%F VS%G,但不能得到我想要的。

如果有一個C++替代品可以。

+0

嘗試'setprecision'。它在''中,它有更多的C++格式輸出格式。 – chris

回答

1

您可以使用*來告訴printf精度將來自int參數值。

printf("%.*f\n", (vals[i] == (int)vals[i]) ? 1 : 3 ,vals[i]); 

應打印:

0.0 
1.0 
0.025 
+0

足夠接近,雖然用printf(「%g%s \ n」,vals [i],((vals [i] ==(int)vals [i])? 「.0」:「」));這樣我就不會失去精確度 – hanlonj

2

您可以使用setprecision(int n),其中n是要輸出的小數位數。任何尾隨零不會被顯示,除非你使用固定符號

#include <iostream> 
#include <iomanip> 

float vals[3] = { 0.0f, 1.0f, 0.025f }; 
std::cout << setprecision(5); 
for(int i=0; i < 3; i++) 
std::cout << vals[i]; 

輸出

0.0 
1.0 
0.025 

更改爲固定符號

cout << setprecision(5) << fixed; 

輸出

0.00000 
1.00000 
0.02500 

編輯如下:還有sc標識符,你可以找出它的功能。 setprecision()---> std :: setprecision()

+0

你忘了指定std命名空間。 ('std :: cout') – SigTerm

+0

OP詢問「0.0」,「1.0」,「0.025」。不是「0.00000」,「1.00000」,「0.02500」。 – Wiz

+0

謝謝Sig,修正了。我展示了兩種方法Wiz。 – Jordonias

2

您可以在打印浮點數和雙精度時指定小數點後的精度。這是通過一個格式說明符來完成的,例如:%.Nf,其中N是一個正整數。所以,如果你使用:

printf("%.3f\n", vals[i]); 

你的輸出是:

0.000 
1.000 
0.025 

但你不能得到它的打印正是你聲明的方式。您將不得不在循環的不同階段更改精度(前兩次迭代爲%.1f,最後一次迭代爲%.3f)。 有很多對printf的,包括前導空格選項,以及:

http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html

編輯:

所以,如果你想有一個最低的印刷1位小數如您在您的評論解釋你可以添加一個明確的檢查對於一個案例:

#include <math.h> 
#include <stdio.h> 

int 
main(int argc, char *argv[]) { 
    float vals[3] = { 0.0f, 1.0f, 0.025f }; 

    for(int i=0; i < 3; i++) { 
    if(fmod(vals[i],1) == 0) printf("%.1f\n", vals[i]); 
    else printf("%f\n", vals[i]); 
    } 

    return 1; 
} 

輸出:

0.0 
1.0 
0.025000 
+0

yep im知道各種說明符。只是不能制定一個組合來獲得我想要的。並不一定需要「聲明」,只需要至少一個「.0」。似乎很奇怪,如果它是不可能的,雖然... – hanlonj