[STM32] 谁帮我计算个小数乘法,送50分

[复制链接]
 楼主| c555 发表于 2017-3-21 20:51 | 显示全部楼层 |阅读模式
  T1,  T2,  T3,  T4,这四个数都是char类型,这是读取AD得到的一个电压,如电压是2.531v,则T1值为0x02、T2值为0x05、T3值为0x03、T4值为0x01。
   为了和实际电压对应,现在需要将2.531*8.3, 计算完毕再转成char类型,以供显示。
   谁能帮我转换一下?我的C基础半路学的,好多没学到。先送50分作为答谢
yiilanying 发表于 2017-3-21 22:03 | 显示全部楼层
       char T1,T2,T3,T4;
             float a,b;
             a=(float)T1+((float)T2*0.1)+((float)T3*0.01)+((float)T4*0.001);
             b=a*8.3;
             T1=b%10;T2=(b*10)%10;T3=(b*100)%10;T4=(b*100)%10;
yiilanying 发表于 2017-3-21 22:05 | 显示全部楼层
yiilanying 发表于 2017-3-21 22:03
char T1,T2,T3,T4;
             float a,b;
             a=(float)T1+((float)T2*0.1)+((float)T3*0.01)+ ...

可能强制转换时 有问题,这就需要你自己调试了
hgjinwei 发表于 2017-3-22 13:16 | 显示全部楼层
纯整数运算,需要注意是否会溢出(貌似T1也不足以让其溢出) 。

  1. int vol_format(char rsb[],char T1,char T2,char T3,char T4)
  2. {
  3.     int     index;
  4.     uint32  v;

  5.     v = T1;
  6.     v = (v * 10) + T2;
  7.     v = (v * 10) + T3;
  8.     v = (v * 10) + T4;

  9.     index = 0;
  10.     for(v *= 83; v > 0; v /= 10){
  11.         rsb[index++] = (v % 10) + '0';
  12.         if(4 == index){
  13.             rsb[index++] = '.';
  14.         }
  15.     }
  16.     if(index <= 4){
  17.         while(index < 4){
  18.             rsb[index++] = '0';
  19.         }
  20.         rsb[index++] = '.';
  21.     }
  22.     if(index <= 5){
  23.         rsb[index++] = '0';
  24.     }

  25.     sm_memreverse(rsb,index);
  26.     rsb[index] = '\0';
  27.     return(index);
  28. }
hgjinwei 发表于 2017-3-22 13:19 | 显示全部楼层
hgjinwei 发表于 2017-3-22 13:16
纯整数运算,需要注意是否会溢出(貌似T1也不足以让其溢出) 。

没考虑负数情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

264

主题

556

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

264

主题

556

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部