2013-04-23 121 views
0

我想用小數/浮點數/雙精度除整數。我能夠將整個數字進行分割,只需使用:int Num1 = 300/2;,但是當我嘗試使小數點「2」時不起作用。我看到有人提到這樣做int Num1 = 300/((float)1.25);。這對我來說確實沒有任何意義...我也嘗試過int Num1 = Decimal.Divide(300, 1.25);沒有任何運氣..將整數除以十進制數

回答

1

您正試圖將結果存儲在一個整數。相反,使用雙作爲變量的類型來存儲結果:

double Num1 = 300/2; 
double Num1 = 300/1.25; 
+0

'300/2'是一個整數除法,這是OP試圖避免的。 '300/2.0'比較好。 – jaket 2013-04-23 22:51:58

4

的問題是,你想要的結果保存到int。試試這個:

float result = 300/(float)2; 
float result = 300/(float)1.25; 

或瞭解更多簡潔(的f是一個信號,編譯器,這是一個float常數):

float result = 300/2f; 
float result = 300/1.25f; 

注意float是從decimal很大的不同,這兩個有它們的優點。要使用十進制:

decimal result = decimal.Divide(300, 1.25); 

或者這樣(的m是一個信號,編譯器,這是一個decimal常數):

decimal result = decimal.Divide(300m, 1.25m); 
+1

注意他用'(float)'做的事情是將其中一個操作數轉換爲浮點數,以便使用的除法運算符是浮點運算符。 – AaronLS 2013-04-23 22:47:40

+2

你也可以寫'var result = 300/2f'或者用雙var result = 300/2d或者var result = 300/2.0' – Marco 2013-04-23 22:49:01

+0

有人可以向我解釋「f」和「m」是什麼在方程中? – Pacobart 2013-04-23 22:56:11

0

int只能存儲整數。當您將整數除以十進制數時,輸出將爲十進制(即使因存儲浮點數而使用4.00)。

這不會編譯

int Num1 = 300/((float)1.25); 

即使你投了明確的浮動(否則1.25將是一個double),你想將其存儲在int類型的變量。編譯器不會自動執行此操作,因爲implicit conversion doesn't exist會爲您投射float作爲int。因此,你需要要麼告訴你不介意失去精度和強制轉換爲一個int

int Num1 = (int)(300/((float)1.25)); 

編譯器或者你可以改變的Num1類型爲浮點型。

float Num1 = 300/((float)1.25); 
2

簡單地說:

  • 如果你這樣做即數學的操作 - 對不同類型的兩個數字(如+, - ,*,/),編譯了「最小的」類型轉換爲「bigest」類型可以保存最多的信息。所以,如果你將300(一個int)除以1.25(一個雙精度),編譯器會將300轉換爲double,並將兩個double都分開。結果類型將是相同的類型,因此:雙精度型。
  • 如果您希望將「較大」類型的結果放入「較小」類型(可容納較少信息的類型,如分數),則必須使用顯式強制轉換將此類型轉換爲較小類型。所以,如果你想把一個double放到一個int中,你必須將它轉換爲int,這樣可能會導致信息的丟失。
  • C#知道你可以在常數使用,明確指出數是什麼類型的許多後綴:
    • 10U ==> UINT
    • 10L ==>長
    • 10F ==>浮動
    • 10D ==> double
    • 10M ==>十進制。
相關問題