c語言如何確定輸入的float型的小數點位數

2021-05-19 18:16:27 字數 4428 閱讀 1268

1樓:匿名使用者

確定輸入的float型的小數點位數,可以通過sprintf函式實現數字轉字串,處理字串,判斷小數版點「.」後的位權數實現,但由於系統中float存在7位有效數字(含小數點,即小數點後有6位小數),使得系統或者補0,或者截斷,導致統計與實際輸入數字的位數不符。

//主要**

char buffer[40];

float fnum=12.38;

sprintf(buffer,"%f",fnum);//獲得字串int i=0,num=0;

for(;*(buffer+i)!='\0';i++)float 為單精度浮點型資料,在turboc中單精度型佔4個位元組(32位)記憶體空間,其數值範圍為3.4e-38~3.

4e+38,只能提供七位有效數字。建議輸入採用字串形式,這樣統計不會出偏差,使用數字時,使用double atof( const char *str )函式轉換。

2樓:

輸入後,bai十進位制數變2進位制。十進位制小

du數zhi 化 2進位制小數 常常 化不盡,所dao以用 大於小於回來判斷float型是否正好答大於小於某數值是困難的。

簡單辦法是用字串方法讀入,直接判斷字串。

float i;

char str[32];

int j,l;

scanf("%s",str);

sscanf(str,"%f",&i);

l = strlen(str);

然後查詢小數點,for (j=0;j

然後從最小的一位 str[l-1] 起迴圈,找到第一個不是 0 的位置。 if (str[k] !='0')

算出位數。

3樓:匿名使用者

樓上說的很對,要是你明白小數的二進位制儲存方式,你就知道了,只是近似儲存,除非是0.5,0.25,0.75等這些2的n次方分之幾的數是精確儲存為,其他的都是近似儲存的

要想精確儲存,只能用字串

c語言 float型別保留幾位啊 怎麼確定

4樓:徜逸

float型別預設保留小數點後6位,若是要輸出一位或者其他位數,可以按照以下形式進專行輸出:

printf("%.(這裡輸入屬要輸出的位數)f",x);

如輸出一位:printf("%.1f",x);

c語言浮點型別的精確位數

例項#include

#include

int main()

5樓:匿名使用者

在c語言中來,float型別的資料預設保源留小數點後6位,不足6位的以0補齊,超過6位按四捨五入截斷。最多能保留7位有效數字,能絕對保證6位有效數字。

詳細可參考博文:網頁連結

**中的2.0其實就是2.000000,3.0其實就是3.000000,float型別的預設保留小數點後6位;

100/40結果應該是2.5,書中的2.0是側重和2.

5做區別,不是和2.000000做區別。同樣,下面的3.

0是要和3.14159做區別,而不是要和3.000000做區別。

所以,**中的2.0其實就是2.00000,3.0其實就是3.000000。

6樓:科技數碼答疑

float(也就是單精度浮點),預設有效位數7位。圖中的2.000000,有效數字就是7位

單精度,float,32位,有效位數為7位

雙精度,double,64位,有效位數15位

7樓:匿名使用者

%.2f就是保留小數點後兩位。數字代表保留幾位。

8樓:匿名使用者

i和j都是int型,兩個int型相除結果保留整數部分,即2,但是f是float型,結果保留6位

9樓:鄭原俊

以float型輸出時是保留小數點後6位

c語言浮點型小數點後為多少位

10樓:假面

單精度浮

點型小bai數點後面有du效數字為

zhi7位和雙精度浮點型小數點後面有dao效版數字為16位。

單精度在一些權處理器上比雙精度更快而且只佔用雙精度一半的空間,但是當值很大或很小的時候,它將變得不精確。當需要小數部分並且對精度的要求不高時,單精度浮點型的變數是有用的。

例如,當表示美元和分時,單精度浮點型是有用的。在foxpro中,單精度浮點型是為了提供相容性,浮點資料型別在功能上等價於數值型。

11樓:great小明童鞋

浮點型變數分為單精度(float型)、雙精度(double型)、長雙精度(long double型)3類,單精度浮點型小數點後專

面有效數屬字為6~7位和雙精度浮點型小數點後面有效數字為15~16位,單精度為32位,雙精度為64位,8位為一個位元組。

實數3.14159在記憶體中的存放形式為+.3141591,+為數符,.314159為小數部分,1為指數10^1,所以單精度提供的是7位有效數字。

c語言是什麼:

首先,人類發明了計算機,需要與計算機「交流」,即寫入和讀出,而且硬體需要與軟體相配才能發揮作用,這樣必須發明一中語言讓人類與機器能夠交流,就誕生了機器語言,也就是低階語言。同時因為機器硬體畢竟不如人聰明(耶~),而且二進位制也是最貼近硬體的語言,所以發明的語言也是最簡單的二進位制,而普通人甚至是科學家也難懂,所以發明了一些高階語言,如同c語言,c++等等。

12樓:文化廚子

c語言中浮點型bai一般du分為float單精度型、zhidouble雙精度型、long double長精度型,單精dao度浮點型小內數點後面有效數字為容6~7位和雙精度浮點型小數點後面有效數字為15~16位。

在c語言標準庫標頭檔案float.h定義了浮點數小數點後的有效位數 :

//float.h標頭檔案的部分**

#define dbl_dig 15    //雙精度小數點後15位#define flt_dig 6     //單精度小數點後6位#define ldbl_dig 19   //長雙精度小數點19

13樓:a九尾妖姬

c語言來中浮點型一般分為float單精度源型、double雙精度型、long double長精度型,單精度浮點型小數點後面有效數字為6~7位和雙精度浮點型小數點後面有效數字為15~16位。

在c語言標準庫標頭檔案float.h定義了浮點數小數點後的有效位數 :

//float.h標頭檔案的部分**

#define dbl_dig 15 //雙精度小數點後15位#define flt_dig 6 //單精度小數點後6位#define ldbl_dig 19 //長雙精度小數點19

14樓:匿名使用者

1.有效數字:

c語言bai中浮點型一du般分為float單精zhi度dao型、double雙精度型

單精度浮點型小數點後面專有效數字為屬7位和雙精度浮點型小數點後面有效數字為16位。

實數3.14159在記憶體中的存放形式為+.3141591,+為數符,.314159為小數部分,1為指數10^1,所以單精度提供的是7位有效數字。

2.位元組:

位元組是計算機資訊科技用於計量儲存容量的一種計量單位,也表示一些計算機程式語言中的資料型別和語言字元。一個英文字母(不分大小寫)佔一個位元組的空間,一箇中文 漢字佔兩個位元組的空間。一個 二進位制數字序列,在 計算機中作為一個數字單元,一般為8位二進位制數佔一個位元組,換算為 十進位制就是0~255。

15樓:匿名使用者

4個位元組是32位,比如32個1 七位有效就是隻記錄小數點後的六位,剩下的就不精確了 比如剩下的全用0代替了 ,顯示預設只有六位,可以控制!

16樓:瘋狂夏風翼

浮點型變數分為單bai

精度(dufloat型)、雙精度(double型)、長雙zhi精度dao(long double型)3類,內單精度浮點型小

數點後面有容效數字為6~7位和雙精度浮點型小數點後面有效數字為15~16位,單精度為32位,雙精度為64位,8位為一個位元組。

實數3.14159在記憶體中的存放形式為+.3141591,+為數符,.

314159為小數部分,1為指數10^1,所以單精度提供的是7位有效數字。希望你能明白~~~樂意為您開心服務~~~

17樓:匿名使用者

他那個有效數抄字就是比如說

baiflaot i = 3.12345678; float的有效數字為6位, 那麼du你輸出的時zhi候就會混沌化,也就是精度dao丟失,printf(「%lf」,i); 那麼他就會輸出3.12345754什麼的,也就是說當值多於有效數字的時候,那麼超出的部分值就是不可靠的值。

18樓:匿名使用者

單精度是七位,雙精度是十五位

c語言 float型資料輸入需要注意什麼嗎

include void main double func float x,float y 如果用float最好不要用double返回 c語言可不可以判斷float型別中是否輸入了字元型別的資料!應該不可已 當字元型別的資料給float型別的變數賦值時會自動將char型資料轉換成float型別 在賦...

C語言檔案輸入輸入問題,C語言程式,把輸入的資訊寫入檔案中的問題

使用fopen函式開啟檔案時,將檔案使用方式更換為 a 如,fp fopen x.txt a 即可實現檔案追加讀寫。fopen c 123.txt a fp fopen x.txt a 怎樣用c語言輸入檔案中的某個內容。例12 2 已知一個文字檔案f.txt中儲存了5個學生的計算機等級考試成績,包括...

若變數已經正確定義float型要通過輸入語句

輸入資料抄要同輸入語句定義襲的輸入格式配套。scanf f f f a,b,c 預設格式bai 是輸入3個數,數du與數之間 zhi用空白分隔 11.0 22.0 33.0 對的dao 11.0,22.0,33.0 錯的 它等同 scanf f f f a,b,c 如果是下面格式 scanf f,f...