我将依靠这句话,没有问题是一个愚蠢的问题,但我有一个稍微愚蠢的问题要问。
编辑:
似乎这个问题已经在这里被问过并回答了几次,尽管使用我在搜索重复项时没有遇到的标题。以下是一些相关的帖子:
- 没有科学记数法的双精度字符串转换
- 如何在没有 10 表示的情况下将 double 转换为字符串 (E-05)
- 有答案的地方 (Jon Skeet):http ://www.yoda.arachsys.com/csharp/DoubleConverter.cs
原始问题:
我有一个应用程序,有时会存储一些相当小的数字,例如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 不够精确,无法正常显示?
编辑
我发现了一个帖子(尽管没有赞成票),它只是在对其进行 a 之前将 Double 值转换为 Decimal .ToString()
,这具有预期的效果。有什么理由我不想这样做吗?也许强制转换Decimal
有可能以与 the 不同的值结束Double
(即使它的数量可以忽略不计),所以#,##0.#################...
格式字符串可能更安全。