[精讚] [會員登入]
6040

【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

你可能感興趣的文章

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

【Maven】如何創建一個簡單可執行的JAR檔 滿重要的一個小功能,畢竟有時候是要傳遞的是JAR檔,而不是直接透過Maven直接部屬之類的

【C++】使用SFML創建新視窗和新增圖標(ICON)並隱藏DOS 筆記,怕自己以後忘記怎麼創建並開啓一個新視窗

【Wicket】[Header]如何讀取來自客戶端地檔頭和傳送自訂擋頭至客戶端 當需要設定檔頭或是讀取來自客戶端的檔頭時,這些程式碼就很好用

【Maven】用Maven來託管Wildfly/jBoss的部屬(deploy)、解部屬(undeploy) 極簡版,給未來想要抄作業的小編自己,完整的一切設定檔,可以依照個人需求作增刪。

【Raspberry Pi/樹梅派】(gcc 10) 如何安裝 gcc & g++ 需要的時間非常久,不愧是gcc的編譯

隨機好文

婕兒──她的青春① 「各位乘客,本列車即將抵達拉里奧哈自治區,並在此地停留三天兩夜,後天的中午十二點將搭乘班機返回臺灣,感謝各位乘客對本次旅程的配合。」火車上的廣播器朗誦道。「時間過得真快呢,這次的歐洲之旅就這樣結束了,

婕兒──她的青春④ 「投降吧,耐耐!這回合妳將不會再有獲勝的機會了!哈哈哈哈!」 「妳確定?」耐耐臉上泛起一絲微笑,並將手中的牌展示給婕兒看 婕兒的笑容僵住了。恐懼浮現在她的臉。

【歌評】蓮台野夜行 - 幻視之夜 ~ Ghostly Eyes 若有什麼是在聽到boss曲前的鋪襯,那一定就是每個系列的道中曲

【歌評】過去の花 過去的花 ~ Fairy of Flower 彼岸花(higan bana),就是歌曲名中所指的花,而彼岸花又有「地獄花jigoku bana」的別稱,請注意,蓮台野的周圍可是長滿彼岸花呢!

艾米莉亞和高捷戀旅④ 來到一號出口以後,艾米看到另外三位參賽者,她與心研便站到他們旁邊。   「這一站的競賽是『