如何在C#中向ulong投射负双精度? 我在C++中发现了一个代码片段,即代码> uTnx=(uTIN)K* 100;哪个k是正或负的浮点。我必须用C#实现这段代码。我把这段代码写成ulong x=Convert.ToUInt64(k*100)在这种情况下,k是正数或负数。所以,当k为正时,代码工作,但如果k为负,则给出错误。但是我完全相信C++是正确的。如何在C#中实现这一点?uint或ulong是无符号的。这意味着它们可以从0开始取值。它们不能接受负值。因此,当您编写Convert.ToUInt64(负数)时,它会给出以下执行选项:

如何在C#中向ulong投射负双精度? 我在C++中发现了一个代码片段,即代码> uTnx=(uTIN)K* 100;哪个k是正或负的浮点。我必须用C#实现这段代码。我把这段代码写成ulong x=Convert.ToUInt64(k*100)在这种情况下,k是正数或负数。所以,当k为正时,代码工作,但如果k为负,则给出错误。但是我完全相信C++是正确的。如何在C#中实现这一点?uint或ulong是无符号的。这意味着它们可以从0开始取值。它们不能接受负值。因此,当您编写Convert.ToUInt64(负数)时,它会给出以下执行选项:,c#,c++,C#,C++,mscorlib.dll中发生类型为“System.OverflowException”的未处理异常 附加信息:算术运算导致溢出 如果您仍然想执行此任务,可以执行与在c++ ulong x = (ulong)k * 100; 我不知道,我完全期待C++解决方案会返回什么。 它将给出相同的 C++ +/COD>结果。< P>因为将负值转换为未签名的UIT64是一个错误,您必须转换为已签名的It64,然后才转换到UIT64,您需要得到与C++相同的结果;p> var result = (UInt6

mscorlib.dll中发生类型为“System.OverflowException”的未处理异常 附加信息:算术运算导致溢出

如果您仍然想执行此任务,可以执行与在
c++

ulong x = (ulong)k * 100;

我不知道,我完全期待C++解决方案会返回什么。

它将给出相同的<代码> C++ +/COD>结果。

< P>因为将负值转换为未签名的UIT64是一个错误,您必须转换为已签名的It64,然后才转换到UIT64,您需要得到与C++相同的结果;p>
var result = (UInt64)Convert.ToInt64 (k * 100); 

不能直接从双精度转换为无符号long,必须先转换为long。所以试试这个:

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

k
为负值时,您希望看到什么行为?例如,如果
k
-11.2345
,您希望
x
有什么值?[或者,换句话说,什么结果“代码>转换?Touth64(K* 100)< /C> >产生代码< >代码< /代码>是否定的?”我不知道,我期望C++解决方案将返回什么。@ Addhan-K吻注,你不必使用<代码>转换。Toutuut64 < /Cord>,在阿尔达汉>中执行相同的转换,在代码> C++ +/>代码>对不起,StByt,但这还不够。有很多“C++解决方案”可以用负值做不同的事情。如果您没有考虑当
k
为负值时,代码将如何处理
x
,那么进行转换是没有意义的。无论x和k变量发生了什么,转换都没有意义。当给它一个负的double时,它应该返回无符号的正long。我不知道应该返回什么,因为我正在开发程序,在检查返回值之前,它给出了错误。在这些建议之后,我将知道应该返回什么。希望这是清楚的发生了什么。非常感谢。谢谢你,我想这会更正确。或者铸造或使用convertTo方法有什么区别吗?@Ardahan Kisbet,是的。差异是存在的,你可以观察到<当值不可转换时,code>Convert.ToUInt64将抛出
System.OverflowException
。铸造只会给编译器一个注释,你知道你在做什么,只需要从变量中取出字节并用另一种方式解释它们。非常感谢你,我会考虑并选择其中一个。