[英]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
在Format
和FormatNumber
的情況下,當指定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.