如何在asp.net核心中设置小数位?

时间:2017-09-07 04:09:50

标签: c# asp.net-core

我对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;)......

1 个答案:

答案 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