![]() |
發布時間: 2024-8-24 08:53
正文摘要:發現在 FloatToNum(float fs)中數值還對,在show里面把四位數碼對應位置賦于數碼管碼值數組顯示數值的,但是數值就被改了。什么原因?感謝大俠指教!(附代碼),還有我調試時的四張圖。第一張圖是在 FloatToNum(flo ... |
glinfei 發表于 2024-8-28 10:37 剛剛記錯了,不好意思,好像還真是,不在ASCII范圍就顯示? |
glinfei 發表于 2024-8-28 10:37 應該不是,你看截圖,上面三個一樣的值就沒有問號。樓主用的DATA,有?,我給改成CODE,也一樣有?的。沒整明白 |
glinfei 發表于 2024-8-28 10:37 感謝!我測試一下。 |
1.如果值在ASCII范圍,就顯示ASCII,不在就顯示? 2.共陽的管子寫反了,應先關再賦值,否則會重影,估計8字筆畫亮度不同還閃爍。 |
lileisgns 發表于 2024-8-26 21:00 這個我也不太懂啊,有知道的大神給解惑一下唄 |
xiaobendan001 發表于 2024-8-26 14:55 DigiValue[uFirst]的值在調試中怎么顯示時帶個‘?’號? 感謝! |
xiaobendan001 發表于 2024-8-26 14:55 感謝!我用C++寫過軟件 ,現在調試都忘記看數碼管顯示的取值了。但是我數碼管顯示的8888.還閃爍。 |
![]() 輸出的結果也都對啊 |
![]() ![]() 模擬中這四個參數的值并沒有改變啊。 |
xiaobendan001 發表于 2024-8-24 13:50 后面調用函數時傳入數值了。 |
FloatToNum 函數中的精度問題: 當 fs 值在 10 到 100 之間時,uShu 被計算為 fs * 100,這可能導致精度損失,因為浮點數乘以 100 并向下取整可能不會得到精確的整數。 void FloatToNum(float fs) { // 根據fs的范圍確定乘數 uint multiplier; if (fs >= 100) multiplier = 10; else if (fs >= 10) multiplier = 100; else multiplier = 1000; // 將fs轉換為整數后乘以相應的乘數 uint temp = (uint)(fs * multiplier); // 四舍五入處理 float remainder = fs - (int)fs; if (remainder >= 0.5f) { temp += 1; } // 計算各個位上的數值 uFirst = temp / 1000; uSecond = (temp / 100) % 10; uThird = (temp / 10) % 10; uFour = temp % 10; } |
不對,你截圖顯示的就不是一個變量啊,雖然穿進去后不是一個,但是實際上也不會變啊。 |
上面的是全局變量,顯示函數里面的參數,是局部變量吧。雖然名字一樣,但是應該不是一個。 |