[精讚] [會員登入]
5615

【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

你可能感興趣的文章

【Vim】解決貼上文字時出現過多空格的問題 換了新系統,有時候就算重裝軟體並且複製了設定檔也還是會出現非常奇怪的現象

【Docker hub】[Linux]以IPv6來pull容器(container)吧! 在一個 IPv6 還不盛行的年代,做事情總是特別麻煩

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

【Maven】[Wicket](Java) 如何部署Wicket到Wildfly內 Wicket 是一個 Java 下的套件,換言之,我們的網頁伺服器後端是由 Java 來撰寫的

【Discord bot】(ERROR)await self.bot.wait_for() 大坑 今天真的是採到大坑,只找到解決方法,具體原因不明

【Wildfly/jBoss】[Linux] 如何從無到有建立Wildfly網頁伺服器 包含一切所需的指令

隨機好文

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

高捷少女:地下城的探險少女(終)  小穹眨眨眼睛,然後說了出來。「其實,從剛剛開始,我就在想了……是在看過這本日記之後。」她拿出日記。「我想……我們尋找寶藏的想法,是不是真的正確的?」「怎麼說呢?」耐耐好奇地問。「這個埋藏寶藏的人,在

高捷少女:購票大作戰② 一個不好的預感浮現,艾米莉亞開始檢查屋子四處。窗戶跟陽台都有關好,也沒有被打開的跡象。但一股無形的壓力,開始在寂靜的公寓中蔓延,她不安地嚥一下喉嚨。最後,她走向那扇窗戶,那前天晚上,白龍為了逃脫,而撞

高捷少女:耐耐的新年驚喜③ 即使如此,夫人仍然每年都會問老爺是否能空出一週時間,但總是被回絕,除了前年以外。老爺答應夫人一定會排出空檔,他們在去年的二十三日前往澳洲。」耐耐嘆了口氣。「那一天的晚上,我打電話給媽媽時,她很高興地告

高捷少女:耐耐的新年驚喜④ 「雖然夫人一直有在保養身體,可是年紀畢竟不小了,醫生曾經說過,不管是不是假性陣痛,一旦夫人有感覺了便立刻送到醫院。」管家爺爺說:「我們已經打電話給附近的大型醫院,救護車很快便會來到這裡。」「去看伯母吧