2011-11-16 25 views
0

在c#中將字符串轉換/解析爲ulong並保持精度的最佳方法是什麼?
直接投射是不可能的,並且Convert類實用程序不提供ulong轉換,所以我使用了一箇中間十進制變量,但我失去了精度。c#:字符串到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 

編輯:
好對不起我的壞:我的問題是非常嚴重的投入。 「長」在C#中確實是一個整數我被其他以前使用過的語言所困惑。此外,我必須使用ulong,因爲這是我使用的第三方代碼請求。因此,如答案中所建議的倍增因子的確是要走的路線

+1

如果您不想丟失有效數字,您必須乘以比例因子。我想建築師會使用毫米而不是米。 –

+0

@HansPassant LOL U're正確。問題是我使用遺留代碼,不能使用我需要做的工作的儀表 –

回答

3

字符串可以存儲比長期更多的數據。如果您轉換爲長時間,您將面臨無法將其轉換回來的風險。

例如如果我的字符串Now is the time for all good men to come to the aid of their party.不能真正轉換爲長。 「精確度」將會丟失。

話雖如此,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. 
+0

@MikaJacobi我覺得這是一個真正的答案。所有「字符串」的集合都比所有「ulong」的集合大得多。精度將會丟失,我爲您的具體情況提供了一種解決方法 – McKay

+1

Mika,真的嗎?這個代碼/答案有什麼問題? –

+0

對第一條評論感到抱歉,但是在編輯回來並完成之前,答案並未完整:-) –

11

ulong是整型的,從來沒有對小數/十進制值任意精度。

相關問題