繁体   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