【问题标题】:c# textbox decimal formattingc#文本框十进制格式
【发布时间】:2011-08-25 08:45:18
【问题描述】:

我希望绑定到货币 (SqlServer) 实体字段的文本框仅显示两位小数而不是四位。

我使用 DevExpress textEditCalcEdit 框,显示和编辑格式如下:"#,##0.00#;(#,##0.00#)"; 但我总是得到四位小数(零)。

我在 Janus Grid 中使用相同的格式字符串,值可以正确显示。

任何想法,谢谢。

【问题讨论】:

    标签: c# formatting decimal


    【解决方案1】:

    我强烈建议尽可能使用内置格式字符串,例如N2

    string s = number.ToString("N2");
    

    如有疑问,请使用 John Sheehan 的 .NET Format String Quick Reference 备忘单。它包含有关在 .NET 中格式化数字和日期所需的所有信息。

    DevExpress 控件通常还要求您指定要格式化的内容(例如数字、日期等):

    calcEdit.Properties.DisplayFormat.FormatType = FormatType.Numeric;
    calcEdit.Properties.DisplayFormat.FormatString = "N2";
    

    如果未指定格式类型,则不会应用格式字符串。

    使用 TextEdit 你应该指定一个掩码。

    textEdit.Properties.Mask.MaskType = MaskType.Numeric;
    textEdit.Properties.Mask.EditMask = "N2";
    

    【讨论】:

    • 试过这个,但没有成功。谢谢
    • 没有办法只得到两位小数,使用设计器。我使用哪个事件来格式化文本框的文本。当我双击网格行(数字列格式正确)时,我在带有文本框的表单上显示相同的数据(在数字文本框中显示尾随四个零)。
    • 尝试指定掩码。请参阅我的更新答案。如果您使用 BindingSource 在文本编辑中显示数据,请在绑定而不是控件上指定格式字符串。
    • 这是解决我的问题的唯一方法: var currencyBinding = new Binding ("Text", entityBindingSource, "Amount"); currencyBinding.Format += new ConvertEventHandler(DecimalToCurrencyString); txbAmount.DataBindings.Add(currencyBinding); // 谢谢你的建议。
    • 在 Binding (msdn.microsoft.com/en-us/library/ms158047.aspx) 的构造函数重载之一中,您可以直接指定格式字符串。这不起作用吗?我很难相信 Mask 解决方案不起作用。
    【解决方案2】:

    使用这个:

    例如,您有一个名为 amount 的变量。然后像这样格式化,

    amount.ToString("###,###.00");
    

    它会给你小数点后两位的金额。

    希望这会有所帮助。

    【讨论】:

    • 我的文本框绑定到具有数字字段的实体,我是否应该在第一次加载数据时格式化文本框,然后在每次文本框值更改时重新格式化?
    【解决方案3】:

    试试#,##0.00——你不应该需要结尾的“#”。

    【讨论】:

      【解决方案4】:

      我通常只是在验证后将新的格式化值写回文本框中。因此,如果它是千分之一的小数,那么在经过验证的事件处理程序中,我在将其解析为这样的浮点数后将值写回文本中。 this.textbox1.Text = speed.ToString("N3").

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        相关资源
        最近更新 更多