搜索
bottom↓
回复: 32

求float算法,对大家绝对有用

[复制链接]

出0入0汤圆

发表于 2013-5-5 17:32:09 | 显示全部楼层 |阅读模式
本帖最后由 孤独将一 于 2013-5-6 09:32 编辑

unsigned int a=10,b=29.
float c;
求c怎么变成10.29,C环境,AVR STUDIO 4
c = (float)(a*100+b)/100;不行

新问题来了,浮点数怎么变成字符串打印。我是一点一点把数字拆开打印的。
  1. gcvt(num_double, 8, str_double);
复制代码
这函数不能用

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-5-5 17:56:03 | 显示全部楼层
c=b;
c =c/a/a;
c = c+a;

出0入0汤圆

发表于 2013-5-5 18:34:42 | 显示全部楼层
你是想表达C=a+b/100,吗?

出0入0汤圆

 楼主| 发表于 2013-5-5 19:45:11 | 显示全部楼层
x11223y 发表于 2013-5-5 18:34
你是想表达C=a+b/100,吗?


试过。不行的。第一次就是这么写

出0入0汤圆

发表于 2013-5-5 19:48:00 | 显示全部楼层
孤独将一 发表于 2013-5-5 19:45
试过。不行的。第一次就是这么写

肯定要加上强制类型转换啊

出0入0汤圆

 楼主| 发表于 2013-5-5 19:52:18 | 显示全部楼层
x11223y 发表于 2013-5-5 19:48
肯定要加上强制类型转换啊


c = (float)(a*100+b)/100;

出0入0汤圆

发表于 2013-5-5 19:59:49 | 显示全部楼层
((float)a*100+b)/100

出0入93汤圆

发表于 2013-5-5 20:00:06 | 显示全部楼层
孤独将一 发表于 2013-5-5 19:45
试过。不行的。第一次就是这么写

c=a+b/100.f

出0入0汤圆

发表于 2013-5-5 20:01:20 | 显示全部楼层
孤独将一 发表于 2013-5-5 19:52
c = (float)(a*100+b)/100;

这句我也不理解float是怎么转化的,是对怎么后面的表达式(a*100+b)/100转化?

出0入0汤圆

发表于 2013-5-5 20:05:33 | 显示全部楼层

  1. float temp;
  2. temp = (float)b;
  3. temp = temp/(100.0);
  4. temp = (float)a + temp;
复制代码

出0入0汤圆

 楼主| 发表于 2013-5-5 20:14:48 | 显示全部楼层
本帖最后由 孤独将一 于 2013-5-5 22:30 编辑
x11223y 发表于 2013-5-5 20:01
这句我也不理解float是怎么转化的,是对怎么后面的表达式(a*100+b)/100转化? ...
  1. a=4;
  2. c=3;//还能插代码,靠方便
复制代码
a=4,b=3
c=(4*10+3)/10=4.3

出0入0汤圆

 楼主| 发表于 2013-5-5 20:15:40 | 显示全部楼层
zhangsusu 发表于 2013-5-5 20:05

我去。关键的数字后面得有“.0”。明我试试!!!

出0入0汤圆

 楼主| 发表于 2013-5-5 20:19:01 | 显示全部楼层
zhangsusu 发表于 2013-5-5 20:05

Matlab算的当然支持了。不过谢谢你的“100.0”

出0入0汤圆

发表于 2013-5-5 21:56:15 | 显示全部楼层
本人一直都用10楼的方法

出0入0汤圆

发表于 2013-5-5 21:59:47 | 显示全部楼层
你这也算标题党吧?我已开始以为是要提高计算效率,后来才看明白是C不过关。

出0入0汤圆

发表于 2013-5-5 22:05:59 | 显示全部楼层
10 楼方法不错,学到了。

出0入0汤圆

发表于 2013-5-5 22:09:58 | 显示全部楼层
赞一个

出0入0汤圆

 楼主| 发表于 2013-5-5 22:31:24 | 显示全部楼层
Sullivan 发表于 2013-5-5 21:59
你这也算标题党吧?我已开始以为是要提高计算效率,后来才看明白是C不过关。 ...

标题党?NO,我是新手。能解决问题的就不是。这网站能插代码,方便啊

出0入0汤圆

发表于 2013-5-5 23:25:03 来自手机 | 显示全部楼层
所有的整形全部加上强制类型转换 …

出0入0汤圆

发表于 2013-5-5 23:52:22 | 显示全部楼层
c=a+b/100.0;
这样行不?

出0入0汤圆

发表于 2013-5-6 02:49:02 | 显示全部楼层
c=(float)a+(float)b/100;

出0入0汤圆

发表于 2013-5-6 02:51:18 | 显示全部楼层
也可以写成
c=a+(float)b/100;
隐含的类型转换

出0入0汤圆

发表于 2013-5-6 02:52:41 | 显示全部楼层
eduhf_123 发表于 2013-5-5 23:52
c=a+b/100.0;
这样行不?

理论上也行。

出0入0汤圆

发表于 2013-5-6 07:15:21 | 显示全部楼层
100.0是关键。否则会先做整数除法运算,然后才转成浮点,但是已经晚了。

出0入0汤圆

发表于 2013-5-6 09:08:26 | 显示全部楼层
孤独将一 发表于 2013-5-5 20:19
Matlab算的当然支持了。不过谢谢你的“100.0”

亲 这不是matlab算法啊
matlab默认的格式是double
我这是标准c

出0入0汤圆

发表于 2013-5-6 09:11:11 | 显示全部楼层
孤独将一 发表于 2013-5-5 20:19
Matlab算的当然支持了。不过谢谢你的“100.0”

其实有一个很简单的规则
1.不要让编译器自己决定数据类型
比如int/float 你把数据类型显示的告知 做成 float/float就行了
2.不要让编译器自己决定优先级
用括号显示的告知编译器就行了

出0入0汤圆

发表于 2013-5-6 09:14:03 | 显示全部楼层
zhxzhx 发表于 2013-5-6 02:51
也可以写成
c=a+(float)b/100;
隐含的类型转换

我还是不建议把数据类型搞得模模糊糊的
我个人很讨厌
+=
=+
++i (i++ 可以接受)
隐式优先级这些东西
多打几个字母又死不了人

出0入0汤圆

发表于 2013-5-6 09:27:00 | 显示全部楼层

c=(float)a+(float)b/100.0

出0入0汤圆

发表于 2013-5-6 16:54:45 | 显示全部楼层
对于 +-*/ 表达式,一般地有 char --> int -->float --> double。

若表达式中有一个float型数据,则按float型来处理;如果没有float,则按int或long型数据来处理。

所以,为了实现目的,应使用 c = a + (float)b/100; 或者是 c = a + b/100.0;

出70入0汤圆

发表于 2013-5-6 18:20:18 | 显示全部楼层
zhangsusu 发表于 2013-5-6 09:14
我还是不建议把数据类型搞得模模糊糊的
我个人很讨厌
+=

  ++++ 、-----------这类写法搞死人,序列点拿来研究还行,千万别用在工程中。

出0入0汤圆

发表于 2013-5-6 18:53:32 | 显示全部楼层
3htech 发表于 2013-5-6 16:54
对于 +-*/ 表达式,一般地有 char --> int -->float --> double。

若表达式中有一个float型数据,则按floa ...
  1. int a, b;
  2. float c;

  3. c = (float)a + float(b)/(100.0);
复制代码
《C专家编程》上推崇这种不用动脑筋的可靠写法

出0入0汤圆

发表于 2013-5-13 19:53:32 | 显示全部楼层
标准函数 sprintf应该有吧,用这个还是很简单的,但代码量大大增加

出0入0汤圆

发表于 2013-5-14 08:42:52 | 显示全部楼层
c = (float)(a*100+b)/100;为什么不行?
我看标准的写法就是这个
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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