0

我正在使用的函数通过除以 100 来计算总数,这只有在价格等于“27.5”时才会出现问题,所以如果是这种情况,我想在最后添加一个零。我会使用 if 语句吗?如果是这样,我该怎么写呢?

var frm = document.forms.myForm;
frm.onchange = function(e) {
    var tot = 0;
    for( var i = 0, l = frm.elements.length; i < l; i++ ) {
        if( frm.elements[i].checked ) {
            tot += parseFloat( frm.elements[i].getAttribute('data-price') );
        }  
    }
    document.getElementById('total').value = "$" + ( tot / 100 );
}

计算jsfiddle上的总价函数

4

4 回答 4

1

根据http://www.javascriptkit.com/javatutors/formatnumber.shtml使用 .toFixed(2) 将其维护为 2 位小数。将其包含在 if 语句中以仅适用于那些非整数答案。

可以通过以下方式检查整数:

function isInt(value) {
  return !isNaN(value) && 
     parseInt(Number(value)) == value && 
     !isNaN(parseInt(value, 10));
}
于 2015-12-02T21:03:56.477 回答
0

你可以这样做:

var frm = document.forms.myForm;
frm.onchange = function(e) {
    var tot = 0;
    for( var i = 0, l = frm.elements.length; i < l; i++ ) {
        if( frm.elements[i].checked ) {
            tot += parseFloat( frm.elements[i].getAttribute('data-price') );
        }  
    }
    tot = tot/100 == Math.round(tot/100) ? tot/100 : (tot/100).toFixed(2);
    document.getElementById('total').value = tot;
}
<form name="myForm">
<table>
    <thead>
        <tr>
            <th>Key Stage 1</th>
            <th>Buy on Paper</th>
            <th>Buy on CD</th>
            <th>Buy on both</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Year 1 All Blocks & Units (15 assessments in total)</td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="0" data-price="2500" />
                £25</label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="1" data-price="2500" />
                £25 †&lt;/label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="2" data-price="4000" />
                £40</label>
            </td>
        </tr>
        <tr>
            <td>Year 2 All Blocks & Units (15 assessments in total)</td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="3" data-price="2500" />
                £25</label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="4" data-price="2500" />
                £25 †&lt;/label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="5" data-price="4000" />
                £40</label>
            </td>
        </tr>
        <tr>
            <td>Give me it all and save some monehhhh!</td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="6" data-price="4750" />
                £47.50</label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="7" data-price="4750" />
                £47.50 †&lt;/label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage1" value="8" data-price="7500" />
                £75</label>
            </td>
        </tr>  
    </tbody>
</table>
                
<table>
    <thead>
        <tr>
            <th>Key Stage 2</th>
            <th>Buy on Paper</th>
            <th>Buy on CD</th>
            <th>Buy on both</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Year 1 All Blocks & Units (15 assessments in total)</td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="0" data-price="2500" />
                £25</label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="1" data-price="2500" />
                £25 †&lt;/label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="2" data-price="4000" />
                £40</label>
            </td>
        </tr>
        <tr>
            <td>Year 2 All Blocks & Units (15 assessments in total)</td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="3" data-price="2500" />
                £25</label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="4" data-price="2500" />
                £25 †&lt;/label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="5" data-price="4000" />
                £40</label>
            </td>
        </tr>
        <tr>
            <td>Give me it all and save some monehhhh!</td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="6" data-price="4750" />
                £47.50</label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="7" data-price="4750" />
                £47.50 †&lt;/label>
            </td>
            <td>
                <label>
                <input type="radio" name="keystage2" value="8" data-price="7500" />
                £75</label>
            </td>
        </tr>  
    </tbody>
</table>
<form>
    <input type="text" id="total" />

于 2015-12-02T21:07:13.317 回答
0
var profits=2489.8237
profits.toFixed(3) => returns 2489.824 (round up)
profits.toFixed(2) => returns 2489.82
profits.toFixed(7) => returns 2489.8237000 (padding)
于 2015-12-02T21:03:32.180 回答
0

我会尝试这样的事情

var frm = document.forms.myForm;
frm.onchange = function(e) {
    var tot = 0;
    for( var i = 0, l = frm.elements.length; i < l; i++ ) {
        if( frm.elements[i].checked ) {
            tot += parseFloat( frm.elements[i].getAttribute('data-price') );
        }  
    }
    tot /= 100
    var numDigits = String(tot).split('').filter(function(char) {
        return /\d/.test(char)
    }).length;
    if (numDigits === 3) {
        tot += "0";
    });
    document.getElementById('total').value = "$" + tot;
}
  1. tot是一个数字。您需要执行类型转换才能将其转换为字符串。split然后,您可以使用该函数将所有字符分成单独的数组元素
  2. 现在我们有了一个数组,我们可以通过运行filter函数并使用该test方法测试正则表达式来仅选择数字。
  3. 然后我们调用length数组上的方法来查找与该表达式匹配的字符数的长度。
  4. 我们现在使用条件表达式来查找位数是否正好等于 3。如果是,我们将 0 附加到字符串的末尾。
于 2015-12-02T21:05:24.513 回答