printf輸出double型別資料遇到的問題

2021-10-03 12:10:23 字數 479 閱讀 1680

以下內容**:

背景:今天在用c語言寫程式時遇到了乙個問題:printf("%lf",double(r));竟然輸出亂碼(0.000000),瀏覽了幾十個網頁之後,大致找到了問題原因。

結論:在c語言中,double型別的讀入必須用"%lf";輸出必須用"%f"

解釋:double和float的精度是不同的,故儲存空間也是不同的,所以如果要讀入double型別,必須要用%lf來讀入,以免精度丟失。而輸出,由於printf中並無對%lf的嚴格定義,故使用%lf不一定會出現正確結果。那使用%f輸出又如何呢?由於c語言中的預設引數提公升規則,%f輸出的不論是float還是double都會被提公升到雙精度進行輸出,並不會有精度丟失。

如果使用c++編譯器,那麼用%lf輸出是正確結果,如果是g++編譯器,則是會輸出錯誤結果,所以盡量使用%f輸出double型別。

如需更詳細解釋,請移步c語言官網檢視printf詳細使用規則。

————————————————

printf中輸出double的佔位符

問 有人告訴我不能在printf中使用 lf。為什麼printf 用 f輸出double型,而scanf卻用 lf呢?答 printf的 f說明符的確既可以輸出float型又可以輸出double型。根據 預設引數提公升 規則 在printf這樣的函式的可變引數列表中 不論作用域內有沒有原型,都適用這...

printf中輸出double的佔位符

問 有人告訴我不能在printf中使用 lf。為什麼printf 用 f輸出double型,而scanf卻用 lf呢?答 printf的 f說明符的確既可以輸出float型又可以輸出double型。根據 預設引數提公升 規則 在printf這樣的函式的可變引數列表中 不論作用域內有沒有原型,都適用這...

c語言double型別printf問題

背景 今天在用c語言寫程式時遇到了乙個問題 printf lf double r 竟然輸出亂碼 0.000000 瀏覽了幾十個網頁之後,大致找到了問題原因。結論 在c語言中,double型別的讀入必須用 lf 輸出必須用 f 解釋 double和float的精度是不同的,故儲存空間也是不同的,所以如...