可以通過printf函數(shù)中的輸出格式說明符來實現(xiàn)保留一位小數(shù)點,要保留一位小數(shù)就用printf("%.1f",x),例子如程序中給出那樣。
十余年的東勝網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整東勝建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“東勝網(wǎng)站設(shè)計”,“東勝網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
例子如下:
直接編譯,程序輸出結(jié)果如下圖所示:
擴展資料:
1.printf("%3.0f",floatNum):不保留小數(shù)
說明:%3.0f表明待打印的浮點數(shù)(floatNum)至少占3個字符寬,且不帶小數(shù)點和小數(shù)部分,整數(shù)部分至少占3個位寬;
注意:這里的3只代表整數(shù)部分至少占3位,舍棄小數(shù)點和小數(shù)點后面的部分。
2.printf("%6.2f".floatNum):保留兩位小數(shù)
說明:%6.2f 表明待打印的數(shù)(floatNum)至少占6個字符寬度(包括兩位小數(shù)和一個小數(shù)點),且小數(shù)點后面有2位小數(shù),小數(shù)點占一位,所以整數(shù)部分至少占3位。
注意:這里的6是待打印的數(shù)至少占據(jù)的字符寬度,包括兩位小數(shù)(如果小數(shù)不夠兩位用0補位,例如100.1打印出來為100.10)和一個小數(shù)點,所以整數(shù)部分至少占3個字符寬度。
這個要看小數(shù)按什么格式輸入。
如果按%s輸入,也就是按字符串格式輸入,先找到小數(shù)點的位置,然后統(tǒng)計下小數(shù)點后數(shù)字的長度。
具體實現(xiàn)可參考:
#include stdio.h
#include stdlib.h
#include string.h
int main(int argc, char* argv[])
{
char a[128];
while(scanf("%s",a)!=EOF)
{
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else
printf("0\n");
}
system("pause");
return 0;
}
如果按%f(對應(yīng)float類型小數(shù))或者%lf(double類型的小數(shù))方式讀入,則需要先去掉整數(shù)部分,然后看小數(shù)部分一直乘10減去整數(shù)部分,知道等于0,統(tǒng)計,乘了幾次10,但是由于浮點數(shù)在計算機中存的并不是準(zhǔn)確值,這個往往得不到正確的結(jié)果??梢允褂胹printf(str,"%g",f);,然后由于f畢竟不是準(zhǔn)確值,還是會出現(xiàn)有些問題,源碼如下:
#include stdio.h
#include stdlib.h
#include string.h
int main(int argc, char* argv[])
{
char a[128];
float f;
while(scanf("%f",f)!=EOF)
{
sprintf(a,"%g",f);
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else
printf("0\n");
}
system("pause");
return 0;
}
這是最后一個已經(jīng)出現(xiàn)錯誤,所以遇到要精確判斷小數(shù)點的位數(shù),最好直接按字符串讀入,這和圖靈機的工作原理暗暗相合。
可以在輸出時,指定小數(shù)點后的有效位數(shù),實現(xiàn)精確到若干位的效果。
要精確到小數(shù)點后若干位,則數(shù)據(jù)類型為浮點型,可能為單精度(float)或雙精度(double)。
在C語言中,使用格式化輸出函數(shù)printf來實現(xiàn)輸出。
輸出格式為
%.NF
1 %為格式化字符串的引導(dǎo)字符。
2 .N表示指定顯示N位小數(shù)。
3 F為類型字符,對于float, F值為f, 對于double,F(xiàn)值為lf。
舉例:
1 要輸出float a=1.23234; 保留3位小數(shù)的寫法為:
printf("%.3f",a);
2 輸出double b=123.345232; 保留4為小數(shù),寫法為:
printf("%.4lf",b);
可以通過printf函數(shù)中的輸出格式說明符來實現(xiàn)保留一位小數(shù)點。
float a = 3.14159;
printf("%.1f", a); // 輸出結(jié)果為3.1
printf("%x.yf", a); // 其中x, y都是常量,a是待輸出的變量。
// 對于變量a的整數(shù)部分輸出,如果a的整數(shù)部分不足x位,則在前面補空格,若大于x位,則按實際位數(shù)輸出
// 對于變量a的小數(shù)部分輸出,如果a的小數(shù)部分不足x位,則在后面補0,若大于x位,則按四舍五入準(zhǔn)則輸出y位小數(shù)
控制小數(shù)位數(shù)就是通過輸出格式說明符來規(guī)定的
舉例說明如下:
1、float f1=3.1415926;
2、float f2=1234.1415926;
3、float f3=124.1;
4、printf("%3.4f",f1);//輸出結(jié)果為:_ _ 3.1416(_表示空格)
5、printf("%3.4f",f2);//輸出結(jié)果為:1234.1416
6、printf("%3.4f",f3);//輸出結(jié)果為:124.1000
printf("%3.4f",f);中的3是控制f的整數(shù)部分按3位的固定位寬輸出;4是按四舍五入的準(zhǔn)則保留4位小數(shù)。
注:如果整數(shù)部分不足3位,則在前面補空格,超過3位,則按實際位數(shù)輸出;如果小數(shù)部分不足4,則在后面補0。
擴展資料:
浮點類型
如果存儲比精度更重要,請考慮對浮點變量使用float類型。相反,如果精度是最重要的條件,則使用double類型。
浮點變量可以提升為更大基數(shù)的類型(從float類型到double類型)。當(dāng)您對浮點變量執(zhí)行算術(shù)時,通常會出現(xiàn)提升。此算術(shù)始終以與具有最高精度的變量一樣高的精度執(zhí)行。例如,請考慮下列類型聲明:
float f_short;double f_long;long double f_longer;f_short=f_short*f_long;
在前面的示例中,變量f_short提升到類型double并且與f_long相乘;然后,結(jié)果舍入到類型float,然后賦給f_short。
在以下示例中(使用前面示例中的聲明),將以浮點(32位)精度對變量執(zhí)行算術(shù);結(jié)果隨后將提升到double類型:
f_longer=f_short*f_short;
double f_long;
long double f_longer;
f_short=f_short*f_long;
在前面的示例中,變量f_short提升到類型double并且與f_long相乘;然后,結(jié)果舍入到類型float,然后賦給f_short。
在以下示例中(使用前面示例中的聲明),將以浮點(32位)精度對變量執(zhí)行算術(shù);結(jié)果隨后將提升到double類型:
f_longer=f_short*f_short;
參考資料:
百度百科——FLOAT(數(shù)據(jù)類型)
float以10進制只有7個有效數(shù)字,如果你存的數(shù)大于7位那么一定會不準(zhǔn)確,小于7位的就準(zhǔn)確,其實float只有前7位有意義,有時會只有6位有意義。。。 也就是說你只用用7-整數(shù)位數(shù)就行,如果整數(shù)位為0,那么你只需要7+第一個不是0的小數(shù)所在位置即可,即此時小樹位數(shù)是大于7的,但有效數(shù)字個數(shù)仍然是7。。。。