為何float有效位數為7位?
首先我們應該明確一點:C語言中,%f表示保留7位有效數字7位有效數字: 是指 整數部分 和小數部分一共7位
單精度數的尾數用23位存儲,加上默認的小數點前的1位1,2^(23+1) = 16777216。
因為 10^7 < 16777216 < 10^8,所以說單精度浮點數的有效位數是7位。
雙精度的尾數用52位存儲,2^(52+1) = 9007199254740992,
因為10^16 < 9007199254740992 < 10^17,所以雙精度的有效位數是16位。

從運行結果上可以看出輸出的結果中前七位是和原數據保持一致,從第八位開始就亂碼了,有些人就會問了,這只是整數部分,那小數部分呢?不要着急,看下面。

結果中48965.94是和原數據的前七位是保持一致的,這樣就可以證明上面所說的:C語言中,%f表示保留7位有效數字7位有效數字: 是指 整數部分 和小數部分一共7位,有些初學者還會把小數點也算進去,其實這是不對的。
2.在默認情況下以%f格式輸出的情況下會輸出6位小數,但並不能保證這6位小數有效,即:是否有效還要看整數位和小數位加在一起是否超過7位。
3.另外我們要知道:有效數字的位數與指定輸出的小數位數(%.7f)是兩碼事。%.mf 格式是自己設置需要輸出幾位小數。
如:

and

