我想問一個關于我今天用C#計算的問題。
double expenses = (pricePen priceMark priceLitres) - discount / 100*(pricePen priceMark priceLitres)。//Incorrect[/span
double expenses = (pricePen priceMark priceLitres) - (pricePen priceMark priceLitres) * discount/100; //Correct
因此,正如你所看到的,在方程的最后,我必須用括號乘以名為 "折扣 "的整數,這顯然是一個折扣百分比。
當我改變該值的位置時,無論它是在括號前面還是在括號后面,答案總是不同的,但在數學中,我甚至自己檢查過,即使該值放在括號前面進行乘法或放在括號后面再進行乘法,我都應該得到相同的答案,但C#卻不這么認為。
我想問問大家,C#究竟是如何計算的,為什么我最后得到的結果是不同的?(結果應該是28.5,而不是38)
[Data: pricePen = 11.6; priceMark = 21.6; priceLitres = 4.8; discount = 25;/span>]
(我知道這個問題無關緊要。)
uj5u.com熱心網友回復:
在第一行除以100后,結果是一個整數。對于這一點,除法的其余部分會丟失。所以乘法的結果比較低。 在第二行中,乘法的結果是正確的,而其余的除法則低于1.
。uj5u.com熱心網友回復:
所以我知道它已經被回答了,但是如果你想了解更多關于用int進行除法的知識 這里是:
例如:
float value = 3/4你會認為它是0.75,但事實并非如此。
因為當編譯器通過值3和4的時候,他做出了最高資料型別的des Literal--在這個例子中是(int)--。
這意味著這個除法的結果將是 "0".75,因為int沒有浮動數,只是將其切斷。然后程式只是把這個值放在浮動值中......
所以結果將是
"3/4" 0 ->"float value" 0.0 = 0.0
在我之前的一些人已經告訴了你這個問題的解決方案,比如把一個除數變成帶.0的浮點數
。float value = 3.0/4
或者你可以告訴編譯器用(float) "命令 "將數值存盤在一個float Literal中
float value = (float) 3/ 4
我希望它能幫助你解釋你為什么這樣做:)
uj5u.com熱心網友回復:
為了避免這些問題,確保你是用浮點型別做數學運算,而不是用int型別。在你的例子中discount是一個int,因此
x * (discount / 100) = x * <integer>
最好是定義一個函式來進行計算,這樣可以強制型別
。double DiscountedPrice(double price, double discount)。
{
return 價格-(折扣/100)*價格。
}
然后以
的方式呼叫它var x = DiscountedPrice( pricePen priceMark priceLitres, 15) 。
在上述情況下,編譯器將強制把整數15轉換為雙數,作為加寬轉換(雙數比整數有更多的數字)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331099.html
標籤:
下一篇:試圖改變變數值,但它永遠不會改變
