[精讚] [會員登入]
5697

【C】〔無條件捨去〕如何忽略float數據 直接儲存成int型態(數據100%不失真)

a148: You Cannot Pass?! 解題時所意外研究出來的神奇寫法,懂了原理之後要自行改寫成四捨五入或無條件進位應該就簡單了吧!

分享此文連結 //n.sfs.tw/14843

分享連結 【C】〔無條件捨去〕如何忽略float數據 直接儲存成int型態(數據100%不失真)@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2020-12-04 04:23:48 最後編修
2020-12-04 03:49:52 By 過路君子
 

哈囉大家好,這裡是把一個很簡單的題目搞得很複雜的小編過路君子

真的不知道有沒有必要,總之就是研究出了這種寫法,紀錄一下,說不定以後會用到

 

直接儲存成float在轉換格式儲存成int是會遇到問題的,舉個最簡單的例子,如果今天要儲存的數字是58.999999999,各位可以試試看,先將其存進float格式的變數裡面,然後再轉存成int之後printf出來會出現什麼。

小編已經嘗試過了,就直接跟大家說吧,會輸出59,如果是未經轉存就輸出則會輸出59.000000,這跟float在電腦內部的表示方式有關係,有興趣者可以查一下「IEEE 754」小編在這就不贅述了。

對了,用double也是一樣的結果,所以這條路就死心吧^ ^,如果用double還可以正常顯示數字就代表你的浮點數還不夠大,不信各位可以測試輸入58.999999,小編保證float和int一樣會輸出59,但是double卻會正確輸出58.999999

每張圖片點擊皆可放大喔!

 

所以結論,直接餵入資料在強制轉換成int這招不行,你資料都失真了,怎麼可能轉換之後會變回正確的?至於這篇為什麼難得是小編寫C語言的介紹呢?因為C的#include<stdlib.h>裡面有個非常好用的函數 —— atoi()

餵入一個char陣列,就會返回一個int的值!這裡有一點要注意的就是,直接餵入string字串會編譯編不過

而返回的int值就是char陣列所對應的整數,繼續以上面58.999999999為例,餵入後atoi返回的值為何呢?答案就是58!

 

所以其實我們要做的事情也很簡單,也就是將資料改儲存成字串之後餵入 atoi()裡面,然後用一個變數去接住。

最後一樣有示範程式碼,相關題目往這裡走,那下方就是完整的題目解答,再下面一樣會附上小編的解題過程。

 

完整程式碼(解答):

 

解題過程:

 

 

 

後記:

猜猜這題最最最最最關鍵的地方在哪裡?在倒數第八行(e>59)不是(e>=59)為了這個等號又找了兩個半小時,找到新的程式寫法都出來了還是無法解決,無奈之下去參考了別人的程式。

你能想像小編當下多麼崩潰嗎?拿到=之後就AC了......

END

你可能感興趣的文章

【Java】(Project Valhalla)關於Java未來重大的變革 讓 Java 再次偉大!Make Java Great Again!

【Nexus Repository Manager】(deploy)使他人可以對遠端資料庫做讀寫 使用 Nexus Repository Manager 來讓各個工程師控制自己的 Jar 包,不會有 Github Merge Crashed 問題。

【Wildfly/jBoss】[Linux](Connection Datasource)如何與MySQL資料庫建立連線 網頁瀏覽器和資料庫的關係密不可分,而通常會將兩者分開架設在不同的伺服器上面來提供服務,這時要如何進行連線呢?

【教程】(進階版)如何用Sigil製作一本高質量的epub 下載好了Sigil之後除了直接把文字貼進去以外,還有:變更字型、著色、導入CSS……等等功能,不知道你有沒有發現呢?

【C++】一些好用的C++小功能 —— 貳 承襲上一篇的C++小功能,筆記下來以免自己以後忘記了。

【ESXI & Oepnwrt】基本錯誤處理 Oepnwrt 為一個自由度超高的軟體,很多事情都能請其幫忙完成,但也因此很複雜,這邊簡單的介紹幾個錯誤的處理方式

隨機好文

【開箱】高捷少女collection總集篇1 由希萌創意寄來的大包裹!裡面究竟有什麼呢?小編就帶大家來看看!

高捷少女:小穹與果仁巧克力㊥ 艾咪臉上泛起笑容說:「妳知道嗎?就跟花語一樣,每一種巧克力也都有各自的涵義:薄荷巧克力代表初戀;卡通巧克力代表天真爛漫;而果仁巧克力代表的是窩心,還有想陪伴對方的心情,這在德國是女生之間在慶生時會彼此

高捷少女:購票大作戰(終) 完了。 這下真的完了! 艾米腦內所有的思考中樞,同時發出了淒厲的吶喊。完蛋啦!這下真的被揭穿了啦!! 「那……那是因為……」艾米結結巴巴的說:「因為……

高捷少女:美麗島的守護者⑤  雖然暫時不用怕牠們了,可是一直躲在這裡終究不是辦法,小雅心想。她看看四周,這間更衣室沒有窗戶或後門,她不禁著急起來,不可能一直躲在這裡面,但從門出去只會被群貓圍攻而已。小雅低下頭苦思該怎麼辦,過了不

【英翻中歌詞】(二創歌)妖精大戰爭 ~Fairy Wars 妖精大戦争 ~Fairy Wars Star light… star bright… 星光閃耀...星輝熠熠... We’re the three brightest stars in the sky tonight! 我們是今晚