在c#中将字符串转换/解析为ulong并保持精度的最佳方法是什么? 直接强制转换是不可能的,转换类实用程序不提供ulong转换,因此我使用了一个中间十进制变量,但我失去了精度。
decimal d = Decimal.Parse("1.0316584"));
Console.Write(d) // displays 1.0316584
ulong u = (ulong)d;
Console.Write(u) // displays 1 , precision is lost
我首先尝试使用长解析器,但是我被抛弃了:
long l = Int64.Parse("1.0316584")); // throws System.FormatException
编辑:
好抱歉我的坏:我的问题非常糟糕。 “long”确实是C#中的一个整数我被其他以前使用过的语言搞糊涂了。另外,我不得不使用ulong,因为这是我使用请求的第三方代码。所以答案中建议的倍增因素确实是要走的路
答案 0 :(得分:12)
ulong
是一个整数类型,对小数/小数值永远不会有任何精度。
答案 1 :(得分:3)
字符串可以存储比长时间更多的数据。如果转换为long,则存在无法将其转换回来的风险。
e.g。如果我的字符串Now is the time for all good men to come to the aid of their party.
无法真正转换为long。 “精确度”将会丢失。
话虽如此,A long是64位整数。除非您愿意以某种方式更改“编码”,否则它无法存储此类数据。如果您的代码如下所示:
decimal d = Decimal.Parse("1.0316584"));
Console.Write(d) // displays 1.0316584
ulong u = (ulong)(d * 1000000000m);
Console.Write(u / 1000000000m) // displays 1.0316584? Precision is not lost.