【问题标题】:Replace exponential value with double value in textbox在文本框中用双精度值替换指数值
【发布时间】:2012-12-15 15:07:22
【问题描述】:

我有一个文本框,我已将文本属性绑定到我的视图模型类中的双倍值。我还为文本框创建了正则表达式,以便只输入数值。

我正在计算我的视图模型类中的值。如果值小于或等于 0.00001,则在文本框中显示指数格式,如 (1.E-5)。

我想在文本框中显示像 0.00001 这样的双精度值,而不是指数格式。我也不想使用字符串格式,即 D、F2、F5。因为它限制了浮点数。我该如何解决?

【问题讨论】:

  • 但是当零太多时,十进制值很难读取。当您直接看到幅度时,科学记数法可以让您轻松得多,而无需手动计算零。

标签: wpf c#-4.0 mvvm telerik


【解决方案1】:

您应该使用 BindingStringFormat 属性。您的 TextBox XAML 应该如下所示,如果您希望它在点后显示 2 个数字:

<TextBox Text="{Binding YourText, StringFormat=N2}" />

如果您需要有关 StringFormat 的更多信息,我鼓励您阅读 Standard Numeric Format Strings 上的 MSDN 文章

【讨论】:

  • 感谢您的回复。我试过 StringFormat 但 N2 会限制点后的位数。我不想限制浮动数字。
  • 没有特定的方法可以让数字中的数字数量不受限制,但最接近的解决方案是作为 StringFormat 提供一个自定义的,指定很多数字。您可以在这里查看答案,例如:stackoverflow.com/questions/7795161/…
【解决方案2】:

我知道这不是解决方案,但它可能会有所帮助。您可以使用获取这样的字符串并更改其格式的方法

string expon2notexpon(string num)
{
    num=num.ToLower();
    int index=num.IndexOf('e');
    if (index == -1)
        return num;

    string firstNum=num.Substring(0, index-1);
    int count=int32.Parse(num.Substring(index+1));
    res="0.";
    for (int i=1;i<count;i++)
    {
        res += '0'
    }
    res += firstNum.ToString();
}

我只是输入了这个想法,可能有一些错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多