printf輸出double類型數據遇到的問題

以下內容轉自:https://blog.csdn.net/weixin_41162823/article/details/82930705

 

背景:今天在用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詳細使用規則。
————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章