有小數點是什麼型別 C語言快速入門 強制型別轉換

2021-10-25 13:30:34 字數 1776 閱讀 4166

我們已經能夠使用陣列進行一些資料統計工作了,就像前面求學生成績平均值一樣,唯一的一點缺陷就是結果沒有精確度,比如說我們可能需要精確到小數點後兩位。這是因為我們使用的是整形陣列,如果將陣列型別定義為float型,那一切就得以解決。

程式使用了我們前面介紹的各種知識,流程已經很容易理解了,需要注意的是,輸出成績時我們使用了%.2f而不是%f,這表示保留小數點後兩位並且執行四捨五入操作,32位環境下浮點數最高精度通常是小數點後6位。

有一些背後的內容需要我們思考。首先,我們說過陣列儲存的是同一資料型別的值的集合,這裡定義了float型陣列,但每個資料初始化時卻給予了乙個int型字面常量。最後的平均成績是sum/count,這是乙個float型除以int型的運算。這一切得以正確運轉,得益於c語言提供的型別轉換,在這裡確切的說是自動型別轉換。

當乙個表示式中的幾個運算元型別不同時,就需要通過一些規則把它們轉換為某種共同的型別來進行最終的求值。一般來說,自動轉換是指把「比較窄的」的運算元轉換為「比較寬的」運算元,並且不丟失資訊的轉換。這裡寬窄是指用sizeof計算的資料型別的占用位元組數。

例如,乙個char型別變數與乙個int型別變數相加,由於char型別本質上是小整型,它比int型別窄,即sizeof(char)小於sizeof(int),因此會自動的轉換為兩個int型變數相加。這種同型別(在這裡都是整型型別)之間的轉換會自動發生,也稱為隱式轉換。 當乙個int型別的變數與乙個float型別的變數相加時,它們的寬度相同,但是由於float型別是比int型別更高等級的型別,因此int型別會轉型為float型別,表示式結果將是float型別。

有時候你可能需要將較寬的資料型別轉換為較窄的資料型別,或在兩種不同的資料型別之間進行轉換。這時可以使用顯示的型別轉換語法:(目標型別)變數。

程式執行的結果是c=115, d=116,在求c的過程中a與b各自被轉換為int型,這種轉換並不會發生捨入操作,因此相當於求表示式45+70的值。而在求d的過程中,是先利用小括號的優先順序,計算兩個float的和,然後將其轉換為int型。

當從較寬的資料型別轉換到較窄的資料型別時,在現代編譯器上,這可以自動完成。但是,由於較寬資料型別儲存的數值可能會超過較窄資料型別的範圍,因此會發生不易發覺的邏輯錯誤。因此這種情況下建議顯示的使用型別轉換,以達到強調作用:我強制將大型別轉換為小型別,可能會引發數值溢位錯誤(以後會詳細講解)!這樣,下次有人閱讀你的**時,他看到強制型別轉換時就會引發敏感性,這樣做會不會引發什麼問題?

這段**使用了/* ... */的方式來註解程式,這是c提供的段落式注釋方式,段注釋是不能巢狀的;我們以前用的//稱為行注釋。

關於資料溢位的另乙個理解方式:假設有兩個盒子ab,a可以裝4個蘋果,b則只能裝1個。你可以很輕鬆的把b中的1個蘋果放進a中,但只能把a中的1個放進b中,其餘的只能找其它盒子了。這些多出的蘋果可以看做是溢位的。

現在繼續回到求平均值的示例上來,你可以嘗試將陣列scores與變數sum宣告為int型,使用強制型別轉換來達到同樣的目的。

c語言float型別小數點後位數

c語言float型別小數點後有幾位有效數字?float型別小數點後有效數字為6 7位。c語言中浮點型一般分為float單精度型 double雙精度型 long double長精度型,單精度浮點型小數點後面有效數字為6 7位和雙精度浮點型小數點後面有效數字為www.cppcns.com15 16位。單...

C 中小數點四捨五入的方法

下面介紹6種asp.net小數點四捨五入的方法 1.只要求保留n位不四捨5入 float f 0.55555f int i int f 100 f float i 1.0 100 2.保留n位,四捨五入 decimal d decimal.round decimal.parse 0.55555 2 ...

C 小數點後保留位數並四捨五入

double salary1 10000.0 double salary2 10000.12345 double salary3 10000.1289 int salary4 10000 string salary5 10000 string salary6 10000.12345 string s...