2009-08-18 40 views
0

例如:如果我有7.2828,我只想把2828作爲一個整數。我可以將double的浮動部分轉換爲整數(不使用字符串轉換)嗎?

+6

我知道這是重複的(我在某些時候回答了它),但是你意識到7.28和7.0028最終都會以28的答案結束,對嗎?你不知道原來的浮動部分是什麼。 – 2009-08-18 16:00:08

+2

你能澄清你如何處理這兩個數字:7.02828和7.000002828 – 2009-08-18 16:01:08

+0

你想如何處理0.000000000125657542619998? – MartW 2009-08-18 16:20:39

回答

3

十進制是你的朋友?

轉換你的電話號碼爲十進制,然後做到這一點。

 decimal d = (decimal)7.2828; 
     int val = decimal.GetBits(d - decimal.Truncate(d))[0]; 

小數點左右的整齊事情是它將val存儲爲int,然後只存儲小數點位置。

3

如果d是原始值,請執行以下操作。

((int)(d * 10000)) % 10000 
+0

不是專門爲這個數字。如果你不知道數字的點數。 10000不起作用。 – jmayor 2009-08-18 17:15:43

+0

在C++中,您應該使用static_cast將double轉換爲int。最終代碼應該看起來像static_cast (d * 10000.0)%10000。 C-cast僅用於兼容性。請不要沒有理由地使用它。 – 2009-08-18 18:03:13

+0

JIa3ep,問題用c#標記。 (其實,出於某種原因,我原來的問題是針對Java :-))。 – avakar 2009-08-18 18:15:24

0

在C++中,使用double modf(double, double *)

double value; 
double fractional_part; 
double integer_part= modf(value, &fractional_part); 
int fractional_part_as_integer= fractional_part * 10000; // insert appropriate scale here. 
0

我不認爲你可以。大多數CPU不能將7.2828表示爲雙(IBM主機是例外)。原因在於它們代表雙打作爲2的冪的和。「7」部分很容易:1 + 2 + 4。分位比較難:0.25 + 0.0.03125 + 0,0009765625 ..... - 一個無限序列。出於實際原因,這個序列被截斷。由此產生的雙倍將接近7.2828。也許7.282800000000001245。這可能不適合(32位)整數。