標(biāo)題: 幫我看看C語(yǔ)言代碼計(jì)算總是錯(cuò)誤 [打印本頁(yè)]

作者: weiwei850113    時(shí)間: 2022-4-23 19:03
標(biāo)題: 幫我看看C語(yǔ)言代碼計(jì)算總是錯(cuò)誤
用如下公式計(jì)算出來(lái)的數(shù)據(jù) 顯示總是不能顯示出小數(shù)點(diǎn)第三位

有點(diǎn)抓狂~~~

        unsigned int t3;

        t3= interData[0]*1000/interData[1];                  //數(shù)據(jù)A/數(shù)據(jù)B 同一濃度比值是固定的
        if(interData[1]==0)                                          //避免0/0
        {
        t3=0;        
        }

        NO3Perc[0]=0x30+t3/1000;                         //顯示t3數(shù)據(jù)
        NO3Perc[1]=0x30+t3/100%10;
        NO3Perc[2]=0x30+t3/10%10;
        NO3Perc[3]=0x30+t3%10;
        NO3Perc[4]=0;


作者: weiwei850113    時(shí)間: 2022-4-23 19:54
說(shuō)一下*100可以顯示  ,*1000就不顯示了 要么顯示1000
作者: weiwei850113    時(shí)間: 2022-4-23 19:54
*100可以顯示 。*1000就不行了
作者: Hephaestus    時(shí)間: 2022-4-23 20:05
最后一句應(yīng)該是NO3Perc[4]=0x30;
作者: weiwei850113    時(shí)間: 2022-4-23 20:09
=0可以的,問題是放大一百倍可以輸出,放大1000倍就有問題
作者: 周翔宇    時(shí)間: 2022-4-24 00:04
放大1000,變量溢出了。最大65535,你把int換成long
作者: vimli    時(shí)間: 2022-4-24 06:46
首先不論怎樣,你的代碼邏輯是有問題的,一般先做參數(shù)檢查再做數(shù)據(jù)處理的,還有就是實(shí)際MCU的數(shù)據(jù)變量保證運(yùn)算不溢出
作者: vimli    時(shí)間: 2022-4-24 07:05
       增加一個(gè)中間變量temp,代碼邏輯會(huì)清晰些
       //顯示t3數(shù)據(jù)
        temp = t3/1000;
        NO3Perc[0]=0x30+temp ;  //千位數(shù)   
        temp = t3%1000;                  
        NO3Perc[1]=0x30+temp /100;//百位數(shù)
         temp = t3%100;
        NO3Perc[2]=0x30+temp /10;//十位數(shù)
        temp = t3%10;
        NO3Perc[3]=0x30+temp ;//個(gè)位數(shù)
        NO3Perc[4]=0;
作者: wulin    時(shí)間: 2022-4-24 09:04
t3=(long)interData[0]*1000/interData[1];




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1