這個要看小數(shù)按什么格式輸入。
創(chuàng)新互聯(lián)公司于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元東坡做網(wǎng)站,已為上家服務(wù),為東坡各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
如果按%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ù)在計算機(jī)中存的并不是準(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ù),最好直接按字符串讀入,這和圖靈機(jī)的工作原理暗暗相合。
說句實話,如果是我,我絕對不會使用這種方式來計算。
因為float精確到小數(shù)點后6位。
我建議你通過這樣的方式來計算:
不定義浮點數(shù),而是定義字符串,然后從小數(shù)點開始計算后面的長度即可。
最主要的是假設(shè)你輸入一個1.123456789123456789除了使用字符串的方式你無法通過正常的浮點數(shù)數(shù)據(jù)類型來精確計算。
100.25432是十進(jìn)制數(shù),存入float要先化成2進(jìn)制float格式,十進(jìn)制化二進(jìn)制,通?;粌?,于是就引入了截斷誤差,以至于,只有6-7位有效數(shù)字精度了。你可以用字符串來輸入和存放。chars[30]="100.25432";intL,k,i,n;L=strlen(s);//計算字符串長度,得9for(i=0;iL;i++)if(s[i]=='.'){k=i;break;};//找出小數(shù)點在哪里,得3n=L-k-1;//小數(shù)點后的位數(shù),得5-----如果輸入,前面添輸入語句:printf("pleaseinput100.25432\n");scanf("%s",s);//讀入100.25432接下來同樣計算L,k,n就可以了。
/*泰勒公式求sin(x)*/
#include?stdio.h
int?main()?{
double?x,s1,e,s=0;
int?n=1;
e=0.000001;?/*誤差上限位六位小數(shù)*/
printf("求sin(x)\n請輸入x(弧度):");
scanf("%lf",x);?
s1=x;
do?{
s+=s1;?/*s1為中間變量*/
s1=-s1*x*x/(n+1)/(n+2);?
n+=2;
}?while?(fabs(s1)=e);?/*fabs為對實數(shù)求絕對值的函數(shù)*/
printf("x=%lf\nsin(x)=%lf\n",x,s);
}
運行結(jié)果
可以在輸出時,指定小數(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);