亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 這個C語言程序 數據類型轉換是不是有什么問題? [打印本頁]

作者: samxon    時間: 2024-4-21 17:51
標題: 這個C語言程序 數據類型轉換是不是有什么問題?
請教大家,
下面的if(watt < jiyiwatt*(1-set3/100.0)) 這個判定有時有效,有時無效。

是不是數據類型轉換的時候有問題。

#define uchar unsigned char
#define uint unsigned int

uint jiyiwatt,watt;
uchar set3=10;

if(watt < jiyiwatt*(1-set3/100.0)){ // set3是下調百分比
        state = 3;
        sdown = 0;
        }else {
        npp = 1;
        state = 1;
        }


作者: Hephaestus    時間: 2024-4-21 20:04
10/100=0這么簡單的常識都不懂才會犯這種低級錯誤。
作者: samxon    時間: 2024-4-21 21:02
Hephaestus 發表于 2024-4-21 20:04
10/100=0這么簡單的常識都不懂才會犯這種低級錯誤。

請問應該怎么修改一下
作者: Hephaestus    時間: 2024-4-21 21:07
samxon 發表于 2024-4-21 21:02
請問應該怎么修改一下

不知道你的數據范圍,無法修改。
作者: fj51hei    時間: 2024-4-21 21:08
Hephaestus 發表于 2024-4-21 20:04
10/100=0這么簡單的常識都不懂才會犯這種低級錯誤。

這個有小數點,愿意是不是弄小數點判斷?
作者: Hephaestus    時間: 2024-4-21 21:26
fj51hei 發表于 2024-4-21 21:08
這個有小數點,愿意是不是弄小數點判斷?

只要set3=10是整形(char/int/long),那么set3/100必然等于0,無論100有沒有小數點。
作者: samxon    時間: 2024-4-21 21:34
Hephaestus 發表于 2024-4-21 21:07
不知道你的數據范圍,無法修改。

set1的范圍是1-99。得到的結果應轉成整形。 jiyiwatt*(1-set3/100.0)應轉成整形。謝謝!
作者: 1600277881    時間: 2024-4-21 21:54
if(watt < jiyiwatt*(1-set3/100.0))
改為
if(watt < (jiyiwatt*(1-set3)/100))
作者: Hephaestus    時間: 2024-4-21 22:52
1600277881 發表于 2024-4-21 21:54
if(watt < jiyiwatt*(1-set3/100.0))
改為
if(watt < (jiyiwatt*(1-set3)/100))

又錯了,運算符乘除法比加減法優先級高,是小學就應該學過的。
作者: 1600277881    時間: 2024-4-21 23:03
Hephaestus 發表于 2024-4-21 22:52
又錯了,運算符乘除法比加減法優先級高,是小學就應該學過的。

是的,這是看錯了,應該是
if(watt < jiyiwatt*(1-set3/100.0))
if(watt < (jiyiwatt-jiyiwatt*set3/100.0))


作者: samxon    時間: 2024-4-21 23:12
set3是一個整數,程序原意是通過除100將百分比轉換成小數,再用1減。
作者: samxon    時間: 2024-4-22 07:02
1600277881 發表于 2024-4-21 23:03
是的,這是看錯了,應該是
if(watt < jiyiwatt*(1-set3/100.0))
if(watt < (jiyiwatt-jiyiwatt*set3/1 ...

watt < jiyiwatt*(1-set3/100.0))沒什么區別吧。
作者: xiaobendan001    時間: 2024-4-22 07:17
要么int,要么char,為啥非要/100?把前邊的數都*100,也就不用最后除100了,這樣不就是都是int了?
作者: rayin    時間: 2024-4-22 07:32
c語言中, 整形變量可以比較大小, 浮點數據是不能直接比大小的. 這個也要注意.
作者: 人中狼    時間: 2024-4-22 07:34
數據強制類型轉換
作者: samxon    時間: 2024-4-22 08:48
謝謝大家回復,大家能不能告訴一下,下面每一步算出來的數是什么類型,值是多少。
set3的取值范圍是5-99,
這一步計算出來的值
jiyiwatt*(1-set3/100.0)


#define uchar unsigned char
#define uint unsigned int

uint jiyiwatt,watt;
uchar set3=10;



if(watt < jiyiwatt*(1-set3/100.0)){ // set3是下調百分比
        state = 3;
        sdown = 0;
        }else {
        npp = 1;
        state = 1;
        }
作者: Hephaestus    時間: 2024-4-22 11:27
jiyiwatt*(1-set3/100.0)改成
(jiyiwatt*(100-set3))/100
作者: 1600277881    時間: 2024-4-22 12:57
samxon 發表于 2024-4-22 07:02
watt < jiyiwatt*(1-set3/100.0))沒什么區別吧。

你試過了么?試過后你再下結論吧
作者: samxon    時間: 2024-4-22 13:29
這樣似乎解決了,還在測試中,高手們看看到底解決沒解決呢,
if(watt < (uint)(jiyiwatt*(100-set3)/100))
作者: 1600277881    時間: 2024-4-22 14:06
samxon 發表于 2024-4-22 13:29
這樣似乎解決了,還在測試中,高手們看看到底解決沒解決呢,
if(watt < (uint)(jiyiwatt*(100-set3)/100))

如果說set3的范圍是0..100, 這種寫法解決不了,只是把你碰到的問題移位了,不信你試試
作者: 1600277881    時間: 2024-4-22 14:11
samxon 發表于 2024-4-22 13:29
這樣似乎解決了,還在測試中,高手們看看到底解決沒解決呢,
if(watt < (uint)(jiyiwatt*(100-set3)/100))

if(watt < (jiyiwatt-jiyiwatt*set3/100.0))

用excel 把范圍設定好,對比一下這幾個方式的誤差就優劣了




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