【问题标题】:View render extra decimal places查看渲染额外的小数位
【发布时间】:2014-06-11 16:07:39
【问题描述】:

我正在开发一个 ASP.NET MVC 4 应用程序,但我还是 MVC 的新手。当我使用 Html.TextBox 时,我注意到视图呈现额外的小数位,如下所示。

    @Html.TextBox("OriginalContractAmt", Model == null ? 0 : Model.OriginalContractAmt, new { @readonly = true })

OriginalContractAmt 属性是模型中的 NotMapped 字段,视图显示值为 479.4000。

我想强制保留两位小数。即 479.40。我该如何存档?尝试在模型中进行跟踪,但没有任何区别。

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0.0#}")]

提前致谢!

【问题讨论】:

  • “Model.OriginalContractAmt 也包含预期值 479.4” - 你是如何检查的? (如果是通过即时窗口,我怀疑可能有问题。)
  • 我通过控制器和视图的监视窗口检查了值。
  • 我的猜测是该值确实 479.4000m,但监视窗口正在截断它。如果您在监视窗口中调用Model.OriginalContractAmt.ToString() 会发生什么?
  • 恐怕到那时,我已经超出了我的深度。很高兴我将问题稍微转移了一点 - 我建议您适当地编辑您的问题。
  • [DisplayFormat] 属性仅在 EditorFor/DisplayFor 中使用,而在 TextBoxFor 等原始 HTML API 中不使用。与 Editor/EditorFor 一起尝试

标签: c# asp.net asp.net-mvc


【解决方案1】:

您可以使用 Math.Round() 将数字四舍五入到小数点后 2 位。

喜欢:

@Html.TextBox("OriginalContractAmt", Model == null ? 0 : Math.Round(Model.OriginalContractAmt,2), new { @readonly = true })

如果你不想向上或向下舍入,那么你可以使用截断,正如Hans Passant 在这里制定的那样:

Truncate Two decimal places without rounding

【讨论】:

    【解决方案2】:

    你可以像这样更新,虽然感觉有点像 hack:

    @Html.TextBox("OriginalContractAmt", Model == null ? 0 : Decimal.Round(Model.OriginalContractAmt, 2), new { @readonly = true })
    

    我假设四舍五入会很好,因为无论如何你会失去回发的精度。

    【讨论】:

      【解决方案3】:

      您指定了错误的掩码:

      • 0 是必填数字
      • # 是可选数字

      所以,这个掩码{0:0.0#} 中的小数位是:

      • 0:1 个强制小数位
      • #:1 个可选小数位

      所以,您的掩码应该是{0:0.00},即必须保留两位小数。

      【讨论】:

        猜你喜欢
        • 2011-07-05
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        相关资源
        最近更新 更多