2013-03-10 121 views
0

我有一個小數功能:在打印參數C#小數精度功能

public decimal NGD(long TotalPages, long XHits, long YHits, long BothHits) 
{ 
    return ((Math.Max(XHits, YHits)-BothHits)/(TotalPages - Math.Min(XHits, YHits))); 
} 

我得到它轉換爲return ((36100000 - 3580000)/(44000000000 - 5630000));但在我的應用程序NGD(44000000000,36100000,5630000,3580000)我得到一個0時應該是0.00073918549

回答

2

這是因爲您正在使用整數除法來截斷結果。使用return ((decimal)(36100000 - 3580000)/((decimal)(44000000000 - 5630000)));進行十進制除法。

+0

請注意,當'(十進制)'強制轉換如此放置時,減法仍然使用'long'執行。如果可以保證它不會溢出(這與「long.MinValue」和「long.MaxValue」不同)。但你也可以使用'return((decimal)Math.Max(XHits,YHits) - BothHits)/((decimal)TotalPages - Math.Min(XHits,YHits));'在這種情況下,十進制「減號」。 – 2013-03-10 15:30:52

2

你正在做整數除法,它只能返回一個截斷的整數。

您需要將一個操作數轉換爲非整數類型(可能爲decimal)。

+0

是的,他的方法的返回類型是'decimal',所以'double'不是。 – 2013-03-10 15:08:06

0

您所有的運算與longSystem.Int64)做這是一個整數類型。只有分割完成後(給出整數結果),商纔會被轉換爲decimal

考慮將您的股息(或甚至只是它的主要期限)轉換爲decimalSystem.Decimal)。然後所有其他long值將自動被「提升」爲decimal

當然,您可以改爲將一個參數(或所有參數)更改爲decimal。將不需要顯式轉換將long類型的表達式轉換爲decimal類型的方法參數。