如何在C#中将负二重转换为ulong?

时间:2016-03-13 00:42:48

标签: c# c++

我在C ++中找到了一个uint x=(uint)k * 100;的代码片段,其中k是一个正或负的浮点数。我必须在C#中实现此代码。我把这段代码写成ulong x = Convert.ToUInt64(k * 100),在这种情况下,k是正面或负面的双倍。因此,当k为正值时,代码正在工作,但如果k为负则则给出错误。但是我完全确定C ++是正确的。我怎么能在C#中做到这一点?

3 个答案:

答案 0 :(得分:3)

uintulong 未签名。这意味着它们可以从0开始取值。它们不能取负值。因此,当您编写Convert.ToUInt64(negative_double)时,它会给出以下执行:

  

未处理的类型' System.OverflowException'发生在mscorlib.dll中   附加信息:算术运算导致溢出。

如果您仍想执行此作业,则可以在c++

中执行相同的演员表
ulong x = (ulong)k * 100;
  

我不知道,我期待C ++解决方案的确切回归。

它会为您提供相同的c++结果。

答案 1 :(得分:2)

由于将负值转换为未签名的UInt64是一个错误,您必须转换为已签名的Int64,然后只需转换为UInt64,您需要获得与C ++相同的结果;

var result = (UInt64)Convert.ToInt64 (k * 100); 

答案 2 :(得分:2)

你不能直接从double转换为unsigned long,你首先必须转换为long。所以试试这个:

ulong x = (ulong)(long)k * 100;

https://msdn.microsoft.com/en-us/library/d3d6fhea%28v=vs.120%29.aspx