簡體   English   中英

使用Visual Basic無法將具有小數點后12位的雙精度/十進制值轉換為字符串

[英]Unable to convert a double/decimal value with 12 decimal places to a string using visual basic

我試圖將具有小數點后12位的雙精度型轉換為字符串,但是它僅返回具有十進制數后的字符串。

我已經嘗試過ToString ,Format,FormatNumber,CStr和System.Convert.ToString 它們都返回10個小數位。

(與十進制數據類型也具有相同的行為)

例:

d = Date.Parse(sDate).ToOADate (value is 41261.001388888886)

d.ToString = 41261.0013888889

CStr(d) = 41261.0013888889

FormatNumber(d, 12) = 41,261.001388888900

FormatFormatNumber的情況下,當指定12個位置時,該值將四舍五入到10位數字。

當我為DataView對象構造一個Filter時,這種情況出現了。

有沒有辦法解決此問題,或者這是.Net的限制?

在查看MSDN頁面的十進制類型時,它會指出:

您可能需要使用d型字符一個較大的值賦給一個小數變量或常量。 此要求是因為編譯器將文字解釋為Long,除非文字類型字符跟在文字之后,如以下示例所示。

所以根據你的例子

Module Module1

    Sub Main()
        Dim d As Decimal
        d = 41261.001388888886D

        Console.WriteLine(d)
        Console.WriteLine(CStr(d))
        Console.WriteLine(FormatNumber(d, 12))
        Console.WriteLine(d.ToString("#0.000000000000"))
        Console.ReadLine()
    End Sub

End Module

顯示:

41261.001388888886
41261.001388888886
4,1261.001388888886
41261.001388888886

試試看,它似乎可以正常工作

Dim d As Decimal = CDec(String.Format("{0:G20}", Date.Parse(CStr(Now)).ToOADate))

Double.ToString僅使用15位精度。

您應該使用d.ToString("R")

MSDN

往返(“ R”)格式說明符可確保將轉換為字符串的數值重新解析為相同的數值。

...

當使用此說明符格式化Single或Double值時,首先使用常規格式對其進行測試,Double的精度為15位,而Single的精度為7位。 如果該值已成功解析回相同的數值,則使用常規格式說明符對其進行格式化。 如果該值未成功解析回相同的數值,則使用Double的17位精度和Single的9位精度對它進行格式化。

暫無
暫無

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

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