如何把一个很大的float数据提取出来。单片机C51

比如这个数据大于4294967295(这是无符号long能表示的最大值),假设这个数是5123456789,显然大了很多,如果直接强制转换成无符号long,肯定有数据丢失... 比如这个数据大于4294967295(这是无符号long能表示的最大值),假设这个数是5123456789,显然大了很多,如果直接强制转换成无符号long,肯定有数据丢失的,现在如何解决。
我这题的平台是单片机C51的,看好哦,不要搞那些纯C啊,C++啊,JAVA那种答案给我。当然,给一个思路也行,都是自学单片机,C语言没有系统学过,很菜。现在只会简单的C51。
展开
 我来答
百度网友cc21aee
2014-08-20 · TA获得超过2044个赞
知道小有建树答主
回答量:1273
采纳率:100%
帮助的人:1224万
展开全部
我以前试过,51单片机里float和double储存的只到小数点后6位,就像你说的5123456789在51单片机里是以5.123456e+9储存的,也就是5123456000,后边的都丢失了,所以简单的程序应该是不可能算到你说的精度的。在32位单片机上用long long 可以储存差不多20位的整数,但是keil 51是不支持的。

你用这么大的数干什么?不行就换一种方法吧。
更多追问追答
追问
很笨的一个方法。自己玩单片机,做一个简易计算器。
想实现两个8位十进制数的加减乘除,加减显然没问题。但乘除在提取数据时遇到上面的问题。

我用最笨的方法,比如两个8位数直接相乘,用了float,如果用long,结果可能会超过long的范围的。
追答
可以用数组模拟加减乘除(整除不算小数位),89c52最起码可以做到15位以上,如果你想做小数的可以移植简易计算器的c程序,在proteus例程里面有两个简易计算器的仿真,一个汇编一个C语言
babytaomail
2014-08-19 · 知道合伙人软件行家
babytaomail
知道合伙人软件行家
采纳数:429 获赞数:1130
某公司嵌入式开发工程师; 熟悉VC++/C/MFC,Linux驱动,STM32,FPGA,Allegro/Pads及硬件电路设计

向TA提问 私信TA
展开全部
你这个5123456789是float型的? 那这数本身这已经丢失精度了, 你想一下,float和long同是4个字节,为什么float反而会比long表示的范围大的多?

如果你这个数是字符串,有别的处理方法。
追问
是我说得不准确,如果是512345678.987,比如如果这是个数,你有什么方法提取每一位出来?
追答
空间足够的话直接使用sprintf()函数。float转成字符串。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式