我对 asp.net core 中的小数位感到疯狂。
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
});
但是,当我得到任何十进制值时,它总是在小数点后两位。
在 View 中:
<input asp-for="money"/>
=> 显示类似 123455,00 的内容。并且这个值会被提交回controller计算,所以应该是数字格式,而不是像ToString("N0")那样的字符串格式...
Decimal 的 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,您可以在 View 模型本身上使用数据注释来指定格式。看这里:"asp-format" not applied to tag helpers .
我是一名优秀的程序员,十分优秀!