一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
楼主: fwj59

求助 关于C51单片机的小数点四舍五入处理

[复制链接]
发表于 2014-4-2 12:42 | 显示全部楼层
我一般不处理小数,如果保留2位通常就把运算中的数字全部扩大100倍,之有最后显示的时候插入一个小数点。
540mv就一直用来计算,最后显示的时候 “40”前面插入小数点,既可以避免浮点运算,计算的结果最后一位误差一个字
回复

使用道具 举报

发表于 2014-4-2 12:48 | 显示全部楼层
本帖最后由 xwj 于 2014-4-2 13:02 编辑

额,干嘛这样复杂?
直接5400*4096/12000,或者540*4096/1200不就行了?
变量用int或者UINT,整数运算自然会丢弃小数位。你要用浮点的话那就加上int()即可。
所有的C编译器都支持的
回复

使用道具 举报

 楼主| 发表于 2014-4-2 13:03 | 显示全部楼层
xwj 发表于 2014-4-2 12:48
额,干嘛这样复杂?
直接5400*4096/12000,或者540*4096/1200不就行了?
变量用int或者UINT,整数运算自 ...

谢谢,540*4096不是超过65535了,我试一下,
回复

使用道具 举报

发表于 2014-4-2 13:09 | 显示全部楼层
一般的计算C编译器都能自动优化的,用户只要注意数据变量的类型以及它的取值范围就行了,同时需要注意下中间变量不要溢出。

更好的优化需要分解常数,比如上面的540*4096/1200,4096=2^12=16*256;1200=16*3*25,所以分子分母同时除以16更为合适。
可以写成x*256/75。
而256是十六进制的0x100,在编译器里面时能得到特别优化的,因为只需移位(移字节)即可。
回复

使用道具 举报

 楼主| 发表于 2014-4-2 13:11 | 显示全部楼层
fujiachun 发表于 2014-4-2 12:42
我一般不处理小数,如果保留2位通常就把运算中的数字全部扩大100倍,之有最后显示的时候插入一个小数点。
...

我也是扩大100倍,实际设置的540的数值

回复

使用道具 举报

 楼主| 发表于 2014-4-2 13:13 | 显示全部楼层
xwj 发表于 2014-4-2 13:09
一般的计算C编译器都能自动优化的,用户只要注意数据变量的类型以及它的取值范围就行了,同时需要注意下中 ...

这个是好办法,我试一下,谢谢
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-22 02:30 , Processed in 0.039769 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表