如何在c# MVC 4中格式化数字以反映两个小数点的货币
本文关键字:两个 货币 小数点 MVC 数字 格式化 | 更新日期: 2023-09-27 18:10:24
所以我有麻烦,我的视图想要更多的数字后面的小数点作为输入比我想要它需要。
我正在使用这个模型:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
public decimal Price { get; set; }
}
这是我的观点:
<div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div>
似乎只是添加DisplayFormat属性到Movie。价格不足以让用户输入像2,79这样的数字,如果他们尝试,他们会得到验证错误。@Html创建的输入字段。EditorFor(model => model. price)则要求数字为2,790(注意在小数点后面添加了一个额外的0)。
我已经尝试了各种DataFormatStrings,但都没有效果,我错过了什么/不理解?
我如何调整我的代码,使用户能够输入2,79作为一个有效的输入,而不是2,790?
这里的问题是服务器——很可能也是客户端验证脚本——将逗号(,
)解析为小数分隔符,而不是千位分隔符。这是因为,在默认区域性中,小数点是.
。所以1234 + 56/100"通常"表示为1,234.56
而不是1.234,56
。
您需要设置适当的区域性,以便解析在您的格式中正确工作。通过在web中全局设置一个值来实现。如果您需要更细粒度的控制,也可以从控制器手动设置Thread.CurrentThread.CurrentUICulture
/Thread.CurrentThread.CurrentCulture
。
这也很可能不会冒泡到客户端验证,所以你需要确保你写了适当的JavaScript验证规则,以及覆盖默认的。
作为旁注,您可能希望做一些事情来指示您的用户期望使用哪种格式。世界上其他地方的人写数字的方式不同,他们可能希望用自己的原生格式。(有时页面语言可以很好地提示预期的数字/日期格式。)