本帖最後由 43777061 於 2018-10-10 19:49 編輯
先謝謝回復和教學
雖然我還是不太懂課本把a,b,c,d,x寫成float的涵義
上面有兩段程式碼,第一個 ...
27756325 發表於 2018-10-10 17:10  這行的意思是宣告5個float變數:a、b、...、x
其中x存放的值是6,其他a~b則是沒有值宣告一個int變數f,存放的值是20在講解這段程式前,我想要先講一個小故事
某天我想要宣告5個變數:a、b、...、e,而且我想讓這五個變數存放一樣的值,假設我現在想要存放1好了
我原本的程式長這樣- int a=1, b=1, c=1, d=1, e=1;
複製代碼 明明這五個變數所要存放的值都一樣,卻要一個個打,實在是太沒效率了,所以我去上網查資料,改用這種方式宣告是不是跟你的程式長得很像?
再看一次你的程式它的意思是要讓a、b、...、f都有一樣的值,前面有講過a~d都是空值,而float是一個存放20的int變數,所以a、b、...、f的值都會變成20
但是a~d都是float,f是int,所以要把f轉換成float
這就像你不能把int賦值給sring,例如下面這段程式碼- int num1 = 30;
- string num2 = "20";
- //錯誤的語法! 這兩個變數的資料型態不同
- num1 = num2;
- //這才對,因為你有用stoi()把num2從string轉換成int
- num1 = stoi(num2);
複製代碼 -
再來看看課本的程式- <<"d /= x => d = "<<(d /= x)<<endl
複製代碼 你注意d是int,x是float,當變數在計算時,擁有較高優先順序的資料型態會決定精確值
因為float的優先順序高於int
所以"d /= x"這個運算是float除法
d是20,x是6,20沒有辦法被6整除,而此時的運算是float除法,所以運算結果會跑出小數點
至於你的程式,你讓d和x的資料型態都為int,所以兩變數相除時是int除法
因此運算結果只會出現整數,不會出現小數點 |