我在C ++中找到了一个uint x=(uint)k * 100;
的代码片段,其中k是一个正或负的浮点数。我必须在C#中实现此代码。我把这段代码写成ulong x = Convert.ToUInt64(k * 100)
,在这种情况下,k是正面或负面的双倍。因此,当k为正值时,代码正在工作,但如果k为负则则给出错误。但是我完全确定C ++是正确的。我怎么能在C#中做到这一点?
答案 0 :(得分:3)
uint
或ulong
未签名。这意味着它们可以从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