簡體   English   中英

轉換小數

[英]Convert decimal

我有例如以下字符串:“0x780000105d0e0030”如果這不是字符串,我可以輕松獲得如下值:

ulong myValue = 0x780000105d0e0030;

它給了我的值:8646911354832027696但是,當我想解析它如下:

var myValue2= Convert.ToInt64("0x780000105d0e0030",16)

這給了我價值:8070450566607667200

然后,myValue與myValue2不同。 然而,myValue是正確的,這就是它應該如何工作。 我究竟做錯了什么?

myValue是無符號Int64時, myValue2是對Int64進行簽名的。

你真正需要的是Convert.ToUInt64函數。

Int64簽名 long

請改用Convert.ToUInt64

var myValue2= Convert.ToUInt64("0x780000105d0e0030",16);

您要轉換的值在Int64的范圍內,並轉換為等效的Int64值,如以下代碼所示:

ulong u = 0x780000105d0e0030;

Console.WriteLine("Convert.ToInt64(\"0x780000105d0e0030\", 16) => {0}", Convert.ToInt64("0x780000105d0e0030", 16));
Console.WriteLine("u                                         => {0}", u);
Console.WriteLine("u.ToString(\"x\")                           => {0}", u.ToString("x"));
Console.WriteLine("Convert.ToInt64(u.ToString(\"x\"), 16)      => {0}", Convert.ToInt64(u.ToString("x"), 16));
Console.WriteLine("u = (ulong)Convert.ToInt64(\"0x780000105d0e0030\", 16)");
u = (ulong)Convert.ToInt64("0x780000105d0e0030", 16);
Console.WriteLine("u                                         => {0}", u);

這導致以下輸出:

Convert.ToInt64("0x780000105d0e0030", 16) => 8646911354832027696
u                                         => 8646911354832027696
u.ToString("x")                           => 780000105d0e0030
Convert.ToInt64(u.ToString("x"), 16)      => 8646911354832027696
u = (ulong)Convert.ToInt64("0x780000105d0e0030", 16)
u                                         => 8646911354832027696

這留下了兩種可能性:

  1. 您正在使用的.net版本(我有4.0.30319 RTMRel)在Convert.ToInt64的實現中存在一個主要缺陷
  2. 您將字符串“0x7000000000000000”傳遞給函數。

我的錢將用於后者的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM