【问题标题】:VB.NET - Converting a string to double and backVB.NET - 将字符串转换为双精度并返回
【发布时间】:2012-03-14 15:40:29
【问题描述】:

我将像这样的值(最初表示为字符串) - 12345678901234.12345678912 - 存储在双变量中。存储后,它以指数格式(带有 e)表示。如何将此指数表示转换为原始(字符串)表示?

Dim s as string = "1234567891234567.123456789"
Dim d as Double
Double.TryParse(s, d)
Console.WriteLine(d) 'Prints 1.23456789123457E+15

使用 Decimal 解决了问题,但为什么 Double 不能做到呢?

【问题讨论】:

    标签: vb.net double type-conversion


    【解决方案1】:

    您的字符串包含 25 个有效数字。 double 根本没有保留那么多信息。即使decimal 也几乎无法容纳那么多(28/29 位)。来自System.Double 的文档:

    默认情况下,Double 值包含 15 位精度的十进制数字,但内部维护最多 17 位数字。

    您应该阅读我关于 binary floating pointdecimal floating point 的文章以了解更多信息 - 它们从 C# 的角度来讨论主题,但您显然使用的是 VB 中的相同类型。

    在您的特定情况下,最接近 1234567891234567.123456789 的 精确double 值只是 1234567891234567 - 您将丢失所有小数点后的信息。

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 2011-05-11
      • 2012-06-23
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多