1

我有以下以 HTML 形式编写的 JavaScript 代码:

  <script type="text/javascript">
    function updatesum() {
    document.functie.column8.value = (document.functie.column6.value -0) * (document.functie.column7.value -0);
    document.functie.column12.value = (document.functie.column10.value -0) * (document.functie.column11.value -0);
    document.functie.column16.value = (document.functie.column14.value -0) * (document.functie.column15.value -0);
    document.functie.column20.value = (document.functie.column18.value -0) * (document.functie.column19.value -0);
   }

并使用 php 形式,如:

echo "<td><input name=\"column6\" onChange=\"updatesum()\"></td>";
echo "<td><input name=\"column7\" onChange=\"updatesum()\"></td>";
  1. 问题是,当我以第一种形式输入一些值时,它给了我总和,但如果我不输入一些值,它给我零,这是我不想要的:

    http://img17.imageshack.us/img17/5456/hyhu.png http://img17.imageshack.us/img17/5456/hyhu.png

  2. 在底部,我有来自第三列的所有值的总和,但它给了我像 2400 或 2300.44 这样的数字,我想要输出 2,400 或将 2300.44 舍入到 2,300。我怎样才能做到这一点?

4

1 回答 1

1

1/你乘以一个值''自动转换为一个整数,所以0。你最终得到0是正常的。如果你不想这样,你必须创建一个检查值的函数输入并返回 '' 如果其中一个是 '' 类似:

function multiply(v1, v2) {
    if (v1 === '' || v2 === '' || isNaN(v1) || isNaN(v2)) {
        return '';
    } 
    return v1*v2;
}

2 /您需要添加一个格式化函数,它将格式化您的代码并添加,它必须的位置并获得小数(或使用该评论中的链接javascript updatesum() 问题):

function formatNumber(num) {
    var formatted = '';
    num = Math.ceil(num) + '';
    for (var i = num.length - 1, j = 0; c = num.charAt(i); i--) {
        if (j % 3 === 0) {
            c = c + ',';
        }
        formatted = c + formatted;
        j++;
    }
    return formatted.trim();
}

你问了一个例子。这应该代替您当前的updatesum功能:

function multiply(v1, v2) {
    if (v1 === '' || v2 === '' || isNaN(v1) || isNaN(v2)) {
        return '';
    } 
    return v1*v2;
}
function multiplyAndFormat(v1, v2) {
    return formatNumber(multiply(v1, v2));
}

function formatNumber(num) {
    var formatted = '';
    num = Math.ceil(num) + '';
    for (var i = num.length - 1, j = 0; c = num.charAt(i); i--) {
        if (j % 3 === 0) {
            c = c + ',';
        }
        formatted = c + formatted;
        j++;
    }
    return formatted.trim();
}

function updatesum() {
    document.functie.column8.value = multiplyAndFormat(document.functie.column6.value, document.functie.column7.value);
    document.functie.column12.value = multiplyAndFormat(document.functie.column10.value, document.functie.column11.value);
    document.functie.column16.value = multiplyAndFormat(document.functie.column14.value, document.functie.column15.value);
    document.functie.column20.value = multiplyAndFormat(document.functie.column18.value, document.functie.column19.value);
}

应该这样做

于 2013-07-20T18:24:28.710 回答