C語言或者liunx系統中有沒有函式,控制double型別的數值計算後結果保留2位小數

2021-03-28 02:47:08 字數 3930 閱讀 7688

1樓:韌勁

c語言中float,double型別,在記憶體中的結構(儲存方式)

從儲存結構和演算法上來講,double和float是一樣的,不一樣的

地方僅僅是float是32位的,double是64位的,所以double能儲存更高的精度。

任何資料在記憶體中都是以二進位制(0或1)順序儲存的,每一個1或0被稱為1位,而在x86cpu上一個位元組是8位。比如一個16位(2 位元組)的short int型變數的值是1000,那麼它的二進位制表達就是:00000011 11101000。

由於intel cpu的架構原因,它是按位元組倒 序儲存的,那麼就因該是這樣:11101000 00000011,這就是定點數1000在記憶體中的結構。

目前c/c++編譯器標準都遵照ieee制定的浮點數表示法來進行float,double運算。

這種結構是一種科學計數法,用符號、指數和 尾數來表示,底數定為2——即把一個浮點數表示為尾數乘以2的指數次方再添上符號。

下面是具體的規格:

型別 符號位 階碼 尾數 長度

float 1 8 23 32

double 1 11 52 64

臨時數 1 15 64 80

由於通常c編譯器預設浮點數是double型的,下面以double為例: 共計64位,摺合8位元組。

由最高到最低位分別是第63、62、61、……、0位: 最高位63位是符號位,1表示該數為負,0正; 62-52位,一共11位是指數位; 51-0位,一共52位是尾數位。

按照ieee浮點數表示法,下面將把double型浮點數38414.4轉換為十六進位制**。

把整數部和小數部分開處理:整數部直接化十六進位制:960e。

小數的處理: 0.4=0.

5*0+0.25*1+0.125*1+0.

0625*0+…… 實際上這永遠算不完!這就是著名的浮點數精度問題。所以直到加上前面的整數部分算夠53位就行了(隱藏位技術:

最高位的1 不寫入記憶體)。

如果你夠耐心,手工算到53位那麼因該是:38414.4(10)=1001011000001110.0110101010101010101010101010101010101(2)

科學記數法為:1.001……乘以2的15次方。

指數為15! 於是來看階碼,一共11位,可以表示範圍是-1024 ~ 1023。因為指數可以為負,為了便於計算,規定都先加上1023,在這裡, 15+1023=1038。

二進位制表示為:100 00001110 符號位:正—— 0 !

合在一起(尾數二進位制最高位的1不要): 01000000 11100010 11000001 11001101 01010101 01010101 01010101 01010101 按位元組倒序儲存的十六進位制數就是: 55 55 55 55 cd c1 e2 40。

2樓:匿名使用者

在c++中輸出一個浮點數n,並保留指定的小數位數,應該怎麼處理呢?首先先把iomanip標頭檔案包含進來,然後對浮點數n按下列操作輸出(假設保留2位小數):

cout<

c中還真的不記得,你可以看看這個函式對照下,自己寫一個。

3樓:匿名使用者

沒有四捨五入的話,要手動在後面加上

a = floor(a*100 + 0.5)/100.0;

4樓:匿名使用者

你是要把這個數繼續作為變數使用麼?

可以這樣子:

char sztmp[30] = "\0";

sprintf(sztmp, "%.2lf", a);

a = atof(sztmp);

這樣,兩位小數後面的都沒去掉了;

但是列印顯示的話 還是要用%.2lf,不然後面還是會有很多0,這是數值的精度位數;

5樓:昔拉

printf("a=%.2f",a);

.2f前面是有個小數點的,

還有什麼問題嗎

6樓:匿名使用者

printf("a=%.2f",a);

c語言編寫程式,對一個double型資料進行四捨五入,要求保留兩位有效小數,求演算法。

7樓:跪著作揖

例如double型的資料為a=5.1413,程式如下:

#incloud

main( )

這時候printf輸出的

專結果將是5.14。

擴充套件資料屬

c語言編寫程式,對double型資料進行四捨五入,保留三位有效數字,程式如下:

這裡以b=8.8888

#incloud

main( )

這時候printf輸出的結果將是8.889。

8樓:

推薦的方法:首先將該數存入double型別的變數中,然後將該變數乘以100(小數點後移

回2位),加上0.5,再強制取整,最

答後除以100.0(小數點前移2位)即得到了結果。

表示式如下(double變數為i):i = (int)(i*100+0.5)/100.0

使用printf輸出時,如果要保留兩位小數輸出,請使用%.2f或%.2lf佔位符

寫一段簡單的c語言程式: 輸入一個double型別的數,使它保留小數點後兩位,對第三位四捨五入處理

9樓:匿名使用者

1 輸入double型別數。

2 利用取整,將第三位四捨五入。

3 輸出結果。

注意,不可以直接以%.2lf輸出,因為題目要求的是在程式中四捨五入處理,而不是僅僅輸出四捨五入後的結果。

**:#include

int main()

10樓:匿名使用者

#include

int main()

//無論

是3.456還是3.45615...都滿足條件哈!

c語言:怎麼樣使結果輸出時保留一位小數;保留兩位小數?

11樓:蹦迪小王子啊

用定來點格式。

float 型 %.2f 就是源

小數bai2位,

du %.1f 就是小數zhi1位。

double 型 用dao %.2f 就是小數2位, %.1f 就是小數1位。

double 型 用 %.2lf 就是小數2位, %.1lf 就是小數1位。

擴充套件資料

算術運算子

用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運算,%)、自增(++)、自減(--)共七種。

關係運算子

用於比較運算。包括大於(>)、小於(<)、等於(==)、 大於等於(>=)、小於等於(<=)和不等於(!=)六種。

邏輯運算子

用於邏輯運算。包括與(&&)、或(||)、非(!)三種。

位操作運算子

參與運算的量,按二進位制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。

賦值運算子

用於賦值運算,分為簡單賦值(=)、複合算術賦值(+=,-=,*=,/=,%=)和複合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種。

12樓:金色潛鳥

用定點格式。

float 型 %.2f 就是小數2位, %.1f 就是小數專1位double 型 用屬 %.2f 就是小數2位, %.1f 就是小數1位

double 型 用 %.2lf 就是小數2位, %.1lf 就是小數1位

c語言中有哪些算術運算子C語言中有哪些算術運算子

c語言中算術運算子有以下這些 例項 include int main 當上面的 被編譯和執行時,它會產生下列結果 line 1 c 的值是 31 line 2 c 的值是 11 line 3 c 的值是 210 line 4 c 的值是 2 line 5 c 的值是 1 line 6 c 的值是 2...

C語言課程設計職工管理系統,C語言課程設計 職工管理系統

如果做bs架構的話可以用我們方正飛鴻平臺來做,快速搭建,省時省力,系統穩定,快捷維護 c語言課程設計 職工資訊管理系統 120 自己做吧,我c語言是不太熟悉。命令列下要實現你說的這些東西至少得要3個小時!c語言課程設計 職工資訊管理系統 就給10分,沒人會給你做的 c語言課程設計,職工資訊管理系統 ...

如何用c語言獲取當前系統時間

include include void main include 必須的時間函式標頭檔案 time t 時間型別 time.h 定義 struct tm 時間結構,time.h 定義如下 int tm sec int tm min int tm hour int tm mday int tm mo...