2015-04-22 67 views
2

當我試圖計算折扣價格,它返回0這是錯誤的。 總數爲100,折扣率爲10%。我知道這個公式,但它的回頭率0當試圖計算折扣價格返回0這是錯誤的C#Asp.net

我的C#代碼:

protected void TxtDiscountPER_TextChanged(object sender, EventArgs e) 
{ 
    TxtDiscountAMT.Text = Convert.ToString(((Convert.ToInt16(TxtDiscountPER.Text))/100) * (Convert.ToInt16(TxtTotalAmt.Text))); 
} 
+1

什麼返回'Convert.ToInt16(TxtDiscountPER.Text)'精確?可能的[integer divison](http://mathworld.wolfram.com/IntegerDivision.html)大小寫。 –

+0

將調試器放入事件處理程序TxtDiscountPER_TextChanged中,並檢查文本框的Text屬性中的值。我希望你能爲你的問題得到一個解決方案。 –

+0

而不是100,你可以除以100.0並得到結果。除以整數後結果爲整數,如果除數更大,結果顯然爲0.如果除以100.0,則可以得到浮點結果。您可以從中提取結果以更正小數位。 – Pramod

回答

11

這裏:

(Convert.ToInt16(TxtDiscountPER.Text))/100 

你把一個Int16(10)由Int32(100)使用整數除法,產生0。要引用MSDN

當你分兩個整數時,結果總是一個整數。例如,7/3的結果是2.要確定7/3的餘數,請使用餘數運算符(%)。要獲得商數爲有理數或分數,給予股息或除數類型float或double類型。

我建議你使用decimal data type而不是浮動或雙,因爲十進制是更適合的貨幣價值:

(Convert.ToDecimal(TxtDiscountPER.Text))/100 
+0

與decimil工作,但我需要使用整數 – rawan

+0

@rawan:爲什麼? '10/100 = 0.1'。你不能在整數中存儲'0.1'。如果你願意,你可以將你的*結果*轉換回整數。如果只是格式化,請使用適當的[格式字符串](https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx)。 – Heinzi

0

該部門將返回一個十進制值。您正在將該部門轉換爲Int16。所以它總是會返回一個INT值,即0 0