为什么剃刀会自动将小数类型四舍五入到小数点后两位?

Far*_*dov 5 c# asp.net-mvc decimal rounding razor

这是我在视图模型中的字段:

public decimal MyValue { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我在视图中显示值的方式:

@Html.EditorFor(model => model.MyValue)
Run Code Online (Sandbox Code Playgroud)

我从DB一路调试,关掉所有JS。我仍然在 View 中得到该模型的值为 12.34345,但呈现给用户的最终值为 12.34。

这个问题是问如何解决这个问题,但为什么不清楚。

有趣的是,当我使用:

@Html.HiddenFor(model => model.MyValue)
Run Code Online (Sandbox Code Playgroud)

四舍五入没有发生。

小智 7

这是默认的功能EditorTemplatedecimal。形成源代码(注意格式为"{0:0.00}"

internal static string DecimalTemplate(HtmlHelper html)
{
    if (html.ViewContext.ViewData.TemplateInfo.FormattedModelValue == html.ViewContext.ViewData.ModelMetadata.Model)
    {
        html.ViewContext.ViewData.TemplateInfo.FormattedModelValue = String.Format(CultureInfo.CurrentCulture, "{0:0.00}", html.ViewContext.ViewData.ModelMetadata.Model);
    }
    return StringTemplate(html);
}
Run Code Online (Sandbox Code Playgroud)

如果要显示保存的小数位,请使用@Html.TextBoxFor(m => m.MyValue),或者您可以使用 应用自己的格式DisplayFormatAttribute,该方法将遵守该格式EditorFor(),例如

[DisplayFormat(DataFormatString = "{0:0.00000}", ApplyFormatInEditMode = true)]`
public decimal MyValue { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • `[DisplayFormat(DataFormatString = "{0:F5}", ApplyFormatInEditMode = true)]` 也适用。 (3认同)