输出中的其他零

时间:2019-05-22 05:45:09

标签: javascript asp.net

screenshot

当我单击内容以显示输出时,我的程序输出显示另外两个零时出现问题。这是我的代码段。

$(MyOrder).each(function () {
    var markup = '<tr data-toggle="modal" data-target="#myModal" onclick="ViewDetails(\'' + $(this).find("OrderNo").text() + '\',\'' + $(this).find("OrderStatus").text() + '\',\'' + $(this).find("Description").text() + '\',\'' + $(this).find("Filenames").text() + '\')">';
    markup = markup + "<td><label style='textalign:center;'>" + row + "</label></td>";
    markup = markup + "<td style='text-align:center;'><label style='' id='idRefNum"+row+"' >" + $(this).find("OrderNo").text() + "</label></td>";
    markup = markup + "<td style='text-align:center;'><label style='' id='idOrderDate"+row+"' >" + formatDateMMDDYYYY($(this).find("OrderDate").text()) + "</label></td>";
    markup = markup + "<td hidden style='text-align:center;'><label style='' id='idPRNo"+row+"' >" + $(this).find("PRno").text() + "</label></td>";
    markup = markup + "<td hidden style='text-align:center;'><label style='' id='idPRDate"+row+"' >" + formatDateMMDDYYYY($(this).find("PRDate").text()) + "</label></td>";
    markup = markup + "<td hidden style='text-align:center;'><label style='' id='idPONo"+row+"' >" + $(this).find("PoNo").text() + "</label></td>";
    markup = markup + "<td hidden style='text-align:center;'><label style='' id='idPODate"+row+"' >" + formatDateMMDDYYYY($(this).find("PODate").text()) + "</label></td>";
    markup = markup + "<td hidden style='text-align:center;'><label style='' id='idGRDate"+row+"' >" + formatDateMMDDYYYY($(this).find("GRdate").text()) + "</label></td>";
    markup = markup + "<td hidden style='text-align:center;'><label style='' id='idIRDate"+row+"' >" + formatDateMMDDYYYY($(this).find("IRDate").text()) + "</label></td>";
    markup = markup + "<td style='text-align:left;'><label style='' id='idReqBy"+row+"' >" + $(this).find("RequestedBy").text() + "</label></td>";
    markup = markup + "<td style='text-align:right;'><label style='' id='idTotal"+row+"' >" + $(this).find("Total").text() + "</label></td>";
    markup = markup + "<td style='text-align:left;'><label style='' id='idDesc"+row+"' >" + $(this).find("Description").text() + "</label></td>";
    markup = markup + "</tr>";
    $("#tblMyorder tbody").append(markup);
    var Total = $("#idTotal" + row).text();
    Total = parseFloat(Total).toFixed(2);
    Total = Total.toLocaleString('en');

    $("#idTotal"+ row).text(numberWithCommas(Total)); 
    row = row + 1;
});

更新:numberWithCommas的定义是:

function numberWithCommas(x) {
    var parts = x.toString().split(".");
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    return parts.join(".");
} 

1 个答案:

答案 0 :(得分:0)

您的代码有很多问题,我将在下面记录。关于JavaScript,您需要了解的一件事是它是松散类型的,并且不会检查是否将正确的类型传递给函数。

您的完整(相关)代码是:

var Total = $("#idTotal" + row).text();
Total = parseFloat(Total).toFixed(2);
Total = Total.toLocaleString('en');
$("#idTotal"+ row).text(numberWithCommas(Total)); 

所以一行一行:这行会得到一些文本,这意味着代表一个数字。因此Total是一个字符串。

var Total = $("#idTotal" + row).text(); // Example '1234.4567987'

此行都尝试将Total(字符串)转换为浮点数,然后将其格式化为2个小数位。到目前为止,Total仍然是字符串。

Total = parseFloat(Total).toFixed(2); // Example '1234.45'

此行还尝试将数字转换为字符串,但此时Total已经是格式化的字符串。因此,它只是按原样返回它(不执行任何操作)。

Total = Total.toLocaleString('en'); // Example still '1234.45'

但是,如果您执行以下操作,您将更接近所要查找的内容。

parseFloat($("#idTotal" + row).text()).toLocaleString('en'); // 1,234.456

但是,您称这行为一个数字,试图将数千个逗号加起来。同样,它可能正在期待一个数字,而您正在传递一个字符串。

$("#idTotal"+ row).text(numberWithCommas(Total)); 

因此,总而言之,您尝试将数字(Total)格式化为字符串3次,但是只有第一次尝试有效,因为在此之后您将传递字符串而不是数字。

函数numberWithCommas似乎增加了比您想要的小数点。

为进一步提供帮助,我们需要查看函数numberWithCommas的定义,但首先可以尝试:

$("#idTotal"+ row).text(numberWithCommas(parseFloat($("#idTotal" + row).text()))); 

更新

函数numberWithCommas愉快地接受数字或字符串。但是,当使用测试字符串“ 1234.4567987”测试您的确切代码时,我完全按照预期得到了“ 1234.45”。实际上,toLocaleString不是必需的,因为它对字符串没有任何作用。因此,以下代码将按预期工作:

var Total = '1234.4567987';
Total = parseFloat(Total).toFixed(2);
alert(numberWithCommas(Total)); // 1,234.45

就像

var Total = '15000.0000';
Total = parseFloat(Total).toFixed(2);
alert(numberWithCommas(Total)); // 15,000.00

我无法破解此代码。因此,您想要做的事情的核心是有效的。

请按如下所示修改您的代码,然后运行它并报告控制台中显示的内容:

var Total = $("#idTotal" + row).text();
console.log('1: '+Total);
Total = parseFloat(Total).toFixed(2);
console.log('2: '+Total);
console.log('3: '+numberWithCommas(Total));
$("#idTotal"+ row).text(numberWithCommas(Total));
相关问题