【问题标题】:Casting double to int like java像java一样将double转换为int
【发布时间】:2012-04-27 18:54:37
【问题描述】:

我需要一些帮助,在 java 中将一个大的 double 转换为 int:

(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

【问题讨论】:

  • 你真正想要达到什么目的?将 System.currentTimeMillis() 转换为 int 在 Java 中没有任何用处。您真的想要 long 值的底部 32 位吗?
  • 我必须迁移该 java 代码,但在 C# 中会给出不同的结果。
  • 但是你到底在使用这个值是为了什么?这是一个毫无意义的价值。请注意,它不是返回 MinValue,即 -2,147,483,648。

标签: c#


【解决方案1】:

int 的范围为 -2,147,483,648 到 2,147,483,647。结果比这要大得多。您将需要具有更大范围的更大数据类型。试试long 而不是int

long resultado = (long)span.TotalMilliseconds;

结果:

resultado   1335553169530   long

【讨论】:

  • 我需要模拟一个 java 的方法,它转换为 (int) 并返回大约 -1790999999 但在 C# 中总是返回 MinValue。
  • @user1361817:你可以使用(int)(long)span.TotalMilliseconds,但这样做很奇怪。您的原始代码似乎有问题。
  • 在调试模式下,显示我需要的结果,但在执行时返回一个不同的值。 :S
猜你喜欢
  • 2013-06-02
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多