孤独将一 发表于 2013-5-5 17:32:09

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

本帖最后由 孤独将一 于 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;不行

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

PSP2000 发表于 2013-5-5 17:56:03

c=b;
c =c/a/a;
c = c+a;

x11223y 发表于 2013-5-5 18:34:42

你是想表达C=a+b/100,吗?

孤独将一 发表于 2013-5-5 19:45:11

x11223y 发表于 2013-5-5 18:34 static/image/common/back.gif
你是想表达C=a+b/100,吗?

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

x11223y 发表于 2013-5-5 19:48:00

孤独将一 发表于 2013-5-5 19:45 static/image/common/back.gif
试过。不行的。第一次就是这么写

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

孤独将一 发表于 2013-5-5 19:52:18

x11223y 发表于 2013-5-5 19:48 static/image/common/back.gif
肯定要加上强制类型转换啊

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

locky_z 发表于 2013-5-5 19:59:49

((float)a*100+b)/100

takashiki 发表于 2013-5-5 20:00:06

孤独将一 发表于 2013-5-5 19:45 static/image/common/back.gif
试过。不行的。第一次就是这么写

c=a+b/100.f

x11223y 发表于 2013-5-5 20:01:20

孤独将一 发表于 2013-5-5 19:52 static/image/common/back.gif
c = (float)(a*100+b)/100;

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

zhangsusu 发表于 2013-5-5 20:05:33


float temp;
temp = (float)b;
temp = temp/(100.0);
temp = (float)a + temp;

孤独将一 发表于 2013-5-5 20:14:48

本帖最后由 孤独将一 于 2013-5-5 22:30 编辑

x11223y 发表于 2013-5-5 20:01 static/image/common/back.gif
这句我也不理解float是怎么转化的,是对怎么后面的表达式(a*100+b)/100转化? ...a=4;
c=3;//还能插代码,靠方便a=4,b=3
c=(4*10+3)/10=4.3

孤独将一 发表于 2013-5-5 20:15:40

zhangsusu 发表于 2013-5-5 20:05 static/image/common/back.gif


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

孤独将一 发表于 2013-5-5 20:19:01

zhangsusu 发表于 2013-5-5 20:05 static/image/common/back.gif


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

airwolf09921 发表于 2013-5-5 21:56:15

本人一直都用10楼的方法

Sullivan 发表于 2013-5-5 21:59:47

你这也算标题党吧?我已开始以为是要提高计算效率,后来才看明白是C不过关。

wugang_1213 发表于 2013-5-5 22:05:59

10 楼方法不错,学到了。

Xplain 发表于 2013-5-5 22:09:58

赞一个{:smile:}

孤独将一 发表于 2013-5-5 22:31:24

Sullivan 发表于 2013-5-5 21:59 static/image/common/back.gif
你这也算标题党吧?我已开始以为是要提高计算效率,后来才看明白是C不过关。 ...

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

majianjia1991 发表于 2013-5-5 23:25:03

所有的整形全部加上强制类型转换 …

eduhf_123 发表于 2013-5-5 23:52:22

c=a+b/100.0;
这样行不?

zhxzhx 发表于 2013-5-6 02:49:02

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

zhxzhx 发表于 2013-5-6 02:51:18

也可以写成
c=a+(float)b/100;
隐含的类型转换

zhxzhx 发表于 2013-5-6 02:52:41

eduhf_123 发表于 2013-5-5 23:52 static/image/common/back.gif
c=a+b/100.0;
这样行不?

理论上也行。

xizi 发表于 2013-5-6 07:15:21

100.0是关键。否则会先做整数除法运算,然后才转成浮点,但是已经晚了。

zhangsusu 发表于 2013-5-6 09:08:26

孤独将一 发表于 2013-5-5 20:19 static/image/common/back.gif
Matlab算的当然支持了。不过谢谢你的“100.0”

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

zhangsusu 发表于 2013-5-6 09:11:11

孤独将一 发表于 2013-5-5 20:19 static/image/common/back.gif
Matlab算的当然支持了。不过谢谢你的“100.0”

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

zhangsusu 发表于 2013-5-6 09:14:03

zhxzhx 发表于 2013-5-6 02:51 static/image/common/back.gif
也可以写成
c=a+(float)b/100;
隐含的类型转换

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

无级电工 发表于 2013-5-6 09:27:00


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

3htech 发表于 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;

绿茶山人 发表于 2013-5-6 18:20:18

zhangsusu 发表于 2013-5-6 09:14 static/image/common/back.gif
我还是不建议把数据类型搞得模模糊糊的
我个人很讨厌
+=


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

zhangsusu 发表于 2013-5-6 18:53:32

3htech 发表于 2013-5-6 16:54 static/image/common/back.gif
对于 +-*/ 表达式,一般地有 char --> int -->float --> double。

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

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

PZHengwf 发表于 2013-5-13 19:53:32

标准函数 sprintf应该有吧,用这个还是很简单的,但代码量大大增加

zhugean 发表于 2013-5-14 08:42:52

c = (float)(a*100+b)/100;为什么不行?
我看标准的写法就是这个
页: [1]
查看完整版本: 求float算法,对大家绝对有用