我将依赖于这样的说法:毫无疑问是一个愚蠢的问题,但我有点愚蠢的问题。
修改
似乎这个问题已经在这里被问过和回答了几次,虽然使用了我在搜索重复项时没有遇到过的标题。以下是一些相关的帖子:
原始问题:
我有一个应用程序,有时会存储一些相当小的数字,例如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.#################...
格式字符串可能更安全。
答案 0 :(得分:3)
使您的格式字符串保持不变(例如在您的资源文件中)并按名称使用它。你可以避免看到丑陋的格式,并在格式中控制到控制之间保持一致(即,如果你改变主意,所有控件都会焕然一新。)
作为替代方法(或结合使用),从文本框中派生自定义控件,并具有以更简单的语法调用您希望使用的不同格式字符串的属性。
无论哪种方式,你的目标都不应该重复自己......将配置置于一个地方,避免最终错误输入,并且必须追踪一个奇怪的格式错误。
我们通过创建封装所有格式和解析要求的“percent”和“currency”文本控件来做类似的事情。它们就像文本控件一样工作。