更容易防止数字以指数表示法显示

时间:2009-10-21 19:20:43

标签: asp.net vb.net formatting notation exponent

我将依赖于这样的说法:毫无疑问是一个愚蠢的问题,但我有点愚蠢的问题。

修改

似乎这个问题已经在这里被问过和回答了几次,虽然使用了我在搜索重复项时没有遇到过的标题。以下是一些相关的帖子:

  1. Double to string conversion without scientific notation
  2. How to convert double to string without the power to 10 representation (E-05)
  3. 放置答案(Jon Skeet):http://www.yoda.arachsys.com/csharp/DoubleConverter.cs

  4. 原始问题:

    我有一个应用程序,有时会存储一些相当小的数字,例如0.000023425。这些数字会加载到TextBox控件中供用户编辑。以下人为的例子显示了我的问题:

    Dim number As Double = 0.000023425
    someTextBox.Text = number.ToString() ' Shows "2.3425E-05"
    

    如上所述,显示的文字是2.3425E-05,这对用户来说并不是非常直观,而且我的数字更精确(小数点后19位)。我希望输出是固定点。当然,我可以轻松干净地做到:

    number.ToString("F20") ' Shows "0.00002342500000000000"
    

    但是剩下的还有一些令人讨厌的零。所以,为了解决这个问题,我可以做到:

    number.ToString("#,##0.####################") ' Shows "0.000023425"
    

    这就是我想要的,但是有没有比在那里拥有那个巨大的丑陋格式字符串更好的方法呢?所以,好吧,这不是那么难看,但肯定有不同的方式,对吧?我的目标是以友好的方式显示存储在数据库中的原始值,我宁愿不必在数字上强制使用格式。

    谢谢!

    更新

    也许我在帖子中说了太多。经过一些实验,我发现将基础数据类型更改为Decimal可以解决问题。

    Dim number As Decimal = 0.000023425
    someTextBox.Text = number.ToString() ' Shows "0.000023425" instead of "2.3425E-05"
    

    听起来Double s不够精确,无法正常显示?

    修改

    I found a post(尽管没有upvotes)只是在对其进行.ToString()之前将Double值转换为Decimal,这具有所需的效果。我有什么理由不想这样做吗?也许对Decimal的强制转换有可能以与Double不同的值结束(即使它的数量可以忽略不计),因此#,##0.#################...格式字符串可能更安全。

1 个答案:

答案 0 :(得分:3)

使您的格式字符串保持不变(例如在您的资源文件中)并按名称使用它。你可以避免看到丑陋的格式,并在格式中控制到控制之间保持一致(即,如果你改变主意,所有控件都会焕然一新。)

作为替代方法(或结合使用),从文本框中派生自定义控件,并具有以更简单的语法调用您希望使用的不同格式字符串的属性。

无论哪种方式,你的目标都不应该重复自己......将配置置于一个地方,避免最终错误输入,并且必须追踪一个奇怪的格式错误。

我们通过创建封装所有格式和解析要求的“percent”和“currency”文本控件来做类似的事情。它们就像文本控件一样工作。