[精讚] [會員登入]
5805

【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

你可能感興趣的文章

【C】〔無條件捨去〕如何忽略float數據 直接儲存成int型態(數據100%不失真) a148: You Cannot Pass?! 解題時所意外研究出來的神奇寫法,懂了原理之後要自行改寫成四捨五入或無條件進位應該就簡單了吧!

【Wickct】如何製作一個簡單的動態響應頁面和傳遞參數至其他頁面 身為一個後端架構程式,這個功能當然是非常重要之一

【Wicket】[Cookie]如何讀取和設定客戶端的Cookie 對於某些參數需要給予使用者,我們可以使用 Cookie 來讓客戶端記著,之後再跟伺服器裡的比對來達到驗證的目的

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

【C++】如何解決TLE,換句話說便是加速cin, cout的執行速度 [ZERO JUDGE](UVa) a159: 11743 - Credit Check 題目練習和副程式練習

【C++】class練習 — 檢測該字串是否為迴圈 第一次的C++結構式寫法,雖然以後應該會見怪不怪,但畢竟是第一次所以還是想保存下來

隨機好文

高捷少女:小穹與果仁巧克力㊤ 阿敏突然輕笑一聲,從櫃臺拿來一個塑膠餐盒,打開給大家看。「這是小穹烤的餅乾,妳們吃吃看就知道她為什麼不想講了。」小穹變得緊張起來。「阿敏,妳怎麼還留著呀?」艾米莉亞、婕兒與耐耐各自拿了一塊,把夾著奶油

婕兒──她的青春② 艾米直搖頭。「我真不敢相信,小穹妳都二十幾歲了,為什麼能想出這種故事呀?」「婕兒也是二十幾歲啊,妳想想她現在是什麼樣子?」小穹不滿地指向火車的方向。

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

艾米莉亞和高捷戀旅③ 「妳最好給我一個完整的理由,告訴我妳為什麼要這麼做。」艾米雙手叉腰,看著這位冒名參賽的後輩。「我會根據妳的說詞來判定妳違反規定的懲處。」

【國文】虬髯客傳 大綱② (無本文、無翻譯) (續上篇筆記) 上篇小編有說要單獨拉出來討論的是這四個成語,分別是: 顧盼暐如——目光流轉,神采