在 .NET MVC 中使用 Javascript 将十进制数格式化为两位

Format decimal number to two places using Javascript with .NET MVC

我有 4 个字段,分别是 money 1、2、3 和 Total,当在 money 1、2、3 中放置一个值时,会发生自动计算并出现在 Total 字段中。但是,当我单击编辑 link 时,所有 4 个字段仍被填充,但它们显示为小数点后 4 位(即 15.1511)而不是小数点后两位(即 15.15)。我见过其他人将他们的值硬编码为 javascript 的示例,但是如下面的代码所示,我没有硬编码数值。

 <script type="text/javascript">
        function sum() {
            var txtFirstNumberValue = document.getElementById('money1').value;
            var txtSecondNumberValue = document.getElementById('money2').value;
            var txtThirdNumberValue = document.getElementById('money3').value;
            var result = parseFloat(txtFirstNumberValue) + parseFloat(txtSecondNumberValue) + parseFloat(txtThirdNumberValue);
            if (!isNaN(result)) {
                document.getElementById('Total').value = result.toFixed(2);
            }
        }
    </script>

我的html查看代码是

@Html.LabelFor(model => model.Total, "Total", new { @class = "control-label col-md-5" })
<div class="col-md-offset-0">
    <input type="text" id="Total" name="Total" value="@Model.Total" />                                  
    @Html.ValidationMessageFor(model => model.Total)
</div>
</div>

<div class="form-group">
    @Html.LabelFor(model => model.money1, "money1", new { @class = "control-label col-md-5" })
    <div class="col-md-offset-0">
        <input type="text" id="money1" onkeyup="sum();" name="money1" value="@Model.money1"  />
        @Html.ValidationMessageFor(model => model.money1)
    </div>
</div>

<div class="form-group">
    @Html.LabelFor(model => model.money2, "money2", new { @class = "control-label col-md-5" })
    <div class="col-md-offset-0">
        <input type="text" id="money2" onkeyup="sum();" name="money2" value="@Model.money2" />
        @Html.ValidationMessageFor(model => model.WeeklyRatesPayable)
    </div>
</div>

<div class="form-group">
    @Html.LabelFor(model => model.money3, "money3", new { @class = "control-label col-md-5" })
    <div class="col-md-offset-0">
        <input type="text" id="money3" onkeyup="sum();" name="money3" value="@Model.money3" />
        @Html.ValidationMessageFor(model => model.money3)
    </div>
</div>

有没有办法通过 javascript 或格式化输入元素来实现这一点?

有了货币类型,您可以调用 ToString("C"); C代表货币。在 Javascript 运行之前,我会将这些设置为在每个框中显示为货币。以这个相关问题为例:

Formatting currency using display template in MVC

已为此创建了一个 HTML 助手:

public static string Currency(this HtmlHelper helper, decimal data, string locale = "en-US", bool     woCurrency = false)
{
    var culture = new System.Globalization.CultureInfo(locale);

    if (woCurrency || (helper.ViewData["woCurrency"] != null && (bool)helper.ViewData["woCurrency"]))
        return data.ToString(culture);

    return data.ToString("C", culture);
}

那你就可以用了:

@Html.Currency(Model.Money);

解决了我的问题。我删除了

<input type="text" id="MAXHB" onkeyup="sum();" name="MAXHB" value="@Model.MAXHB" />

并替换为

@Html.TextBoxFor(model => model.ContractualWeekly, "{0:C}", new { @class = "required numeric", onkeyup = "sum()" })

我对四个字段中的每一个都做了这个,我需要在编辑视图中将小数点表示为两位小数。例如,我的值现在 return 为 £15.24 而不是 £15.2400。

此外,对于我需要用 TextBoxFor 替换的每个字段,我还修改了这些字段所在的模型,使它们现在看起来像

[Display(Name = "money")]
        [DisplayFormat(DataFormatString = "{0:c}", ApplyFormatInEditMode = true)]
        public Nullable<decimal> money { get; set; }

这确保当我 select 我的详细信息视图时,四个值中的每一个在值之前都有一个 £。