找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2958|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

提高浮點(diǎn)數(shù)變整數(shù)的精度 這個(gè)方法很不錯(cuò)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:119948 發(fā)表于 2016-5-11 04:24 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在我們的產(chǎn)品設(shè)計(jì)中,經(jīng)常會(huì)遇到浮點(diǎn)數(shù)變整數(shù)的時(shí)候,那么,我們首先看看,浮點(diǎn)數(shù)變整數(shù)的精度如何?

實(shí)驗(yàn)一:分別定義一個(gè)浮點(diǎn)數(shù)26.6和26.4,把這個(gè)數(shù)強(qiáng)制轉(zhuǎn)換成整數(shù)后,是多少?

下面是我做實(shí)驗(yàn)用的程序:





按理說(shuō),或者說(shuō),我們希望的結(jié)果,應(yīng)該是四舍五入的27和26,但是實(shí)際上....



十六進(jìn)制的1A,就是十進(jìn)制的26.

我們看到了,結(jié)果是程序只取了整數(shù)部分,小數(shù)部分根本沒(méi)有給我們四舍五入。

解決辦法:

只要你的腦袋瓜聰明,可以想出很多解決。

下面我說(shuō)一下我的解決辦法:

實(shí)驗(yàn)二:利用modf函數(shù),把小數(shù)和整數(shù)分離出來(lái),如果小數(shù)小于0.5,就直接取整,如果小數(shù)大于等于0.5,就整數(shù)+1.

用modf函數(shù),需要調(diào)用頭文件math.h




最后輸出的結(jié)果是:



十六進(jìn)制的1B和1A轉(zhuǎn)換成十進(jìn)制,就是27和26,這時(shí)候,結(jié)果就和我們想要的一樣了。

你能想出更簡(jiǎn)便的辦法來(lái)嗎?想出來(lái)的話,不防分享到微信論壇,點(diǎn)擊文章后面的【閱讀原文】就可以進(jìn)入論壇了。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:83553 發(fā)表于 2016-5-12 09:35 | 只看該作者
u16 ix,iy;
float x=26.6,y=26.4;

ix=x+0.5;
iy=y+0.5;
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表