2012-04-27 6 views
0

мне нужна помощь литье большой двойной в целое, в Java:Кастинг двойной Int как Java

(int)System.currentTimeMillis(); //result -186983989 (java) 

Результат всегда возвращать Int32.MinValue, но мне нужен такой же результат, как и Java. , но в C#:

DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
TimeSpan span = DateTime.UtcNow - Jan1st1970; 
Int32 resultado = (int)span.TotalMilliseconds; //result is always -2147483648 and i need same as java 

Спасибо заранее, можете увидеть это изображение https://public.blu.livefilestore.com/y1pwU6fnT0v663NPqa7cSwwU9MSFQeO1TjdOdip1GFn8Eqg0Fgo_rsA3ER2jw5RDpXGOa1WiMc_PFIzzjxkqWe9zQ/wtf.png?psid=1.

+3

Что вы на самом деле пытаетесь достичь? Кастинг 'System.currentTimeMillis()' to 'int' не делает ничего полезного в Java. Вы действительно * хотите * нижние 32 бита значения 'long'? –

+0

Мне нужно перенести этот Java-код, но в C# дается отличный результат. – user1361817

+1

Но что же вы * используете * это значение для? Это довольно бессмысленная ценность. Обратите внимание, что это * не * возвращение MinValue, которое равно -2147,483,648. –

ответ

2

A int имеет диапазон от -2,147,483,648 до 2,147,483,647. Результат намного больше этого. Вам понадобится больший тип данных с большим диапазоном. Попробуйте long вместо int.

long resultado = (long)span.TotalMilliseconds; 

Результат:

resultado 1335553169530 long 
+0

Мне нужно подражать java-методу, и он применяется к (int) и возвращает около -1790999999, но в C# всегда возвращает MinValue. – user1361817

+2

@ user1361817: Ну ты * мог * использовать '(int) (long) span.TotalMilliseconds', но это странно. Кажется, что ваш исходный код неисправен. –

+0

В режиме отладки отображает результат, который мне нужен, но в процессе выполнения возвращает другое значение. : S – user1361817

Смежные вопросы