标题: 帮我看看C语言代码计算总是错误 [打印本页]

作者: weiwei850113    时间: 2022-4-23 19:03
标题: 帮我看看C语言代码计算总是错误
用如下公式计算出来的数据 显示总是不能显示出小数点第三位

有点抓狂~~~

        unsigned int t3;

        t3= interData[0]*1000/interData[1];                  //数据A/数据B 同一浓度比值是固定的
        if(interData[1]==0)                                          //避免0/0
        {
        t3=0;        
        }

        NO3Perc[0]=0x30+t3/1000;                         //显示t3数据
        NO3Perc[1]=0x30+t3/100%10;
        NO3Perc[2]=0x30+t3/10%10;
        NO3Perc[3]=0x30+t3%10;
        NO3Perc[4]=0;


作者: weiwei850113    时间: 2022-4-23 19:54
说一下*100可以显示  ,*1000就不显示了 要么显示1000
作者: weiwei850113    时间: 2022-4-23 19:54
*100可以显示 。*1000就不行了
作者: Hephaestus    时间: 2022-4-23 20:05
最后一句应该是NO3Perc[4]=0x30;
作者: weiwei850113    时间: 2022-4-23 20:09
=0可以的,问题是放大一百倍可以输出,放大1000倍就有问题
作者: 周翔宇    时间: 2022-4-24 00:04
放大1000,变量溢出了。最大65535,你把int换成long
作者: vimli    时间: 2022-4-24 06:46
首先不论怎样,你的代码逻辑是有问题的,一般先做参数检查再做数据处理的,还有就是实际MCU的数据变量保证运算不溢出
作者: vimli    时间: 2022-4-24 07:05
       增加一个中间变量temp,代码逻辑会清晰些
       //显示t3数据
        temp = t3/1000;
        NO3Perc[0]=0x30+temp ;  //千位数   
        temp = t3%1000;                  
        NO3Perc[1]=0x30+temp /100;//百位数
         temp = t3%100;
        NO3Perc[2]=0x30+temp /10;//十位数
        temp = t3%10;
        NO3Perc[3]=0x30+temp ;//个位数
        NO3Perc[4]=0;
作者: wulin    时间: 2022-4-24 09:04
t3=(long)interData[0]*1000/interData[1];




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1