我对asp.net核心中的小数位发疯了。
Sql Server表:
money decimal (18,0)
我输入了Startup.cs / Configure
var cultureInfo = new CultureInfo("vi-VN");
cultureInfo.NumberFormat.CurrencySymbol = "đ";
cultureInfo.NumberFormat.CurrencyDecimalDigits = 0;
cultureInfo.NumberFormat.CurrencyDecimalSeparator = ",";
cultureInfo.NumberFormat.CurrencyGroupSeparator = ".";
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
var supportedCultures = new[]
{
cultureInfo
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("vi-VN"),
// Formatting numbers, dates, etc.
SupportedCultures = supportedCultures,
// UI strings that we have localized.
SupportedUICultures = supportedCultures
});
但是,当我得到任何小数值时,它总是在2位小数。
观看视频:
<input asp-for="money"/>
=&gt;显示类似123455,00的内容。并且这个值将被提交回控制器进行计算,因此它应该是数字格式,而不是字符串格式,如ToString(&#34; N0&#34;)......
答案 0 :(得分:0)
在这方面,十进制ToString
确实很奇怪,因为它没有任何一致的回报。它返回原始数字中可用的小数位数,如果没有小数,则只返回没有小数的整数。
您需要使用C
格式说明符来表明这是一个货币编号,并且它应该遵循该主题中指定的文化。
decimal x = 100.5555;
Console.Write(x.ToString("C")); // Outputs 101 đ. Uses away from zero roundign.
Console.Write(x.ToString()); // Outputs 100.5555.
有关详细信息,请访问:Standard Numeric Format Strings。
修改强>
要使用ModelBinder,您可以使用视图模型本身的数据注释指定格式。见这里:"asp-format" not applied to tag helpers。