2017-10-19 149 views
0

我有一個浮點值是這樣的:0.60000002384185791 我想這個值轉換爲字符串是這樣的:0.60000002384185791(完全一樣 - 沒有科學記數法或剪下精度)如何將分數值轉換爲字符串「原樣」?

但每當我嘗試轉換這個值的字符串,它給了我「0.600000023841858」

代碼:

Dim ddd As Decimal = 0.60000002384185791 '//This value is coming from some method and it may be different like 0.6000000238418579123456789012 or 102020.6000000238418579123456789012 
Dim myVal as string = " Your Value is : " & ddd.ToString() '//This truncates actual value to 0.600000023841858 

是否有任何方法可以將該值「按原樣」轉換(沒有科學記號並且沒有削減精度)?

它在C#中運行良好,但我需要Visual Basic中的解決方案。與語言有什麼關係(我不希望)。

+0

添加d的號碼,它是一個小數?可能會被視爲浮點數並在編譯時被截斷 –

+1

正如@SamiKuhmonen所說,您示例中的問題是您的常量'0.60000002384185791'是一個不能容納這麼多數字的Double。設置「Option Strict On」禁止自動轉換,並確保您從「某些方法」獲得的值永遠不會轉換爲double。 – Blackwood

+0

@SamiKuhmonen,@Blackwood: 我也這樣做過,但沒有運氣。其實我的雙'擁有這個價值。當我將鼠標懸停在它上面時,它顯示出正確的值,即'0.60000002384185791'但是如果我將函數返回類型更改爲'Decimal',它只會返回'06D'。 –

回答

1

幽州的評論:

其實我的雙保持該值。

我相信你正在尋找的是The Round-trip ("R") Format Specifier

往返(「R」)格式說明符試圖確保將轉換爲字符串的數值分析回相同的數值。該格式僅支持Single,Double和BigInteger類型。

對於Double和Single值,在某些情況下,「R」格式說明符 未能成功地將原始值往返並且還提供相對較差的性能 。相反,我們建議您爲Double值使用 「G17」格式說明符,並使用「G9」格式說明符 成功往返Single值。

例子:

Dim ddd As Decimal = 0.60000002384185791D 
Dim originalDouble As Double = ddd 

Dim originalDoubleAsString As String = originalDouble.ToString("R") 
Console.WriteLine(originalDoubleAsString) 

Dim roundTripDouble As Double = Double.Parse(originalDoubleAsString) 
Console.WriteLine("double round tripped correctly: {0}", (originalDouble = roundTripDouble)) 

輸出:

0.60000002384185791

雙輪正確跳閘:真

+0

謝謝你的時間和支持。我已經將答覆標記爲答案,因爲它爲我提供了17位小數。 我們仍然有挑戰,當小數持有精度是大於17個字符,那麼這將無法正常工作,雙重不能持有精度超過17個字符 像: DDD = 0.6000000238418579122233344456D =設爲myVal DDD「這個擁有0.60000002384185791雙而不是「實際」十進制 而且我們也不能寫如下所示的東西,因爲它不被支持: Dim engineeringValue as String = ddd.ToString(「R」)'「R」不是用於小數 –

相關問題