parseFloat 没有给出准确的值
parseFloat Doesn't Give Exact Value
我正在做一个需要 'tip box' 计算系统的项目。正如您在代码片段中看到的那样,它没有像我预期的那样工作。我该如何解决这个问题?
$("select[name='tip']").on('change',function(){
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text());
var total_balance = parseFloat($("#f_total_balance").text());
var tip = parseFloat(thiz.val());
console.log(total_balance+"-"+content_credit+"-"+tip);
$("#f_after_confirm").text(total_balance-content_credit-tip);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong> </td>
<td id='f_total_balance'> 45.67 </td>
</tr>
<tr>
<td> <strong>Credit</strong> </td>
<td id='f_content_credit'> 10.20 </td>
</tr>
<tr>
<td> <strong>TIP BOX</strong></td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | not working</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | not working</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong> <br><small>Total Balance - Credit - Tip</small> </td>
<td id='f_after_confirm'> 35.47 </td>
</tr>
</tbody>
</table>
这样试试,小数点用toFixed()
$("select[name='tip']").on('change',function(){
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text()).toFixed(2);
var total_balance = parseFloat($("#f_total_balance").text()).toFixed(2);
var tip = parseFloat(thiz.val()).toFixed(2);
console.log(total_balance+"-"+content_credit+"-"+tip);
$("#f_after_confirm").text(parseFloat(total_balance-content_credit-tip).toFixed(2));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong> </td>
<td id='f_total_balance'> 45.67 </td>
</tr>
<tr>
<td> <strong>Credit</strong> </td>
<td id='f_content_credit'> 10.20 </td>
</tr>
<tr>
<td> <strong>TIP BOX</strong></td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | not working</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | not working</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong> <br><small>Total Balance - Credit - Tip</small> </td>
<td id='f_after_confirm'> 35.47 </td>
</tr>
</tbody>
</table>
问题是由于浮点计算不一致造成的。您可以在评论中提到的 link @Alexis 阅读更多相关信息,here。
要解决您的实际问题,您可以对最终求和值调用 toFixed()
以将其格式化为所需的小数位数。试试这个:
$("select[name='tip']").on('change', function() {
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text()).toFixed(2);
var total_balance = parseFloat($("#f_total_balance").text()).toFixed(2);
var tip = parseFloat(thiz.val()).toFixed(2);
var final = (total_balance - content_credit - tip).toFixed(2);
console.log(final);
$("#f_after_confirm").text(final);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong>
</td>
<td id='f_total_balance'>45.67</td>
</tr>
<tr>
<td> <strong>Credit</strong>
</td>
<td id='f_content_credit'>10.20</td>
</tr>
<tr>
<td> <strong>TIP BOX</strong>
</td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | works now</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | works now</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong>
<br><small>Total Balance - Credit - Tip</small>
</td>
<td id='f_after_confirm'>35.47</td>
</tr>
</tbody>
</table>
与Math.round(100 * tot) / 100;
一起使用它将固定为.12
位
$("select[name='tip']").on('change',function(){
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text());
var total_balance = parseFloat($("#f_total_balance").text());
var tip = parseFloat(thiz.val());
var tot = total_balance-content_credit-tip;
var cal = Math.round(100 * tot) / 100;
console.log(cal);
$("#f_after_confirm").text(cal);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong> </td>
<td id='f_total_balance'> 45.67 </td>
</tr>
<tr>
<td> <strong>Credit</strong> </td>
<td id='f_content_credit'> 10.20 </td>
</tr>
<tr>
<td> <strong>TIP BOX</strong></td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | not working</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | not working</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong> <br><small>Total Balance - Credit - Tip</small> </td>
<td id='f_after_confirm'> 35.47 </td>
</tr>
</tbody>
</table>
我正在做一个需要 'tip box' 计算系统的项目。正如您在代码片段中看到的那样,它没有像我预期的那样工作。我该如何解决这个问题?
$("select[name='tip']").on('change',function(){
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text());
var total_balance = parseFloat($("#f_total_balance").text());
var tip = parseFloat(thiz.val());
console.log(total_balance+"-"+content_credit+"-"+tip);
$("#f_after_confirm").text(total_balance-content_credit-tip);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong> </td>
<td id='f_total_balance'> 45.67 </td>
</tr>
<tr>
<td> <strong>Credit</strong> </td>
<td id='f_content_credit'> 10.20 </td>
</tr>
<tr>
<td> <strong>TIP BOX</strong></td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | not working</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | not working</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong> <br><small>Total Balance - Credit - Tip</small> </td>
<td id='f_after_confirm'> 35.47 </td>
</tr>
</tbody>
</table>
这样试试,小数点用toFixed()
$("select[name='tip']").on('change',function(){
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text()).toFixed(2);
var total_balance = parseFloat($("#f_total_balance").text()).toFixed(2);
var tip = parseFloat(thiz.val()).toFixed(2);
console.log(total_balance+"-"+content_credit+"-"+tip);
$("#f_after_confirm").text(parseFloat(total_balance-content_credit-tip).toFixed(2));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong> </td>
<td id='f_total_balance'> 45.67 </td>
</tr>
<tr>
<td> <strong>Credit</strong> </td>
<td id='f_content_credit'> 10.20 </td>
</tr>
<tr>
<td> <strong>TIP BOX</strong></td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | not working</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | not working</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong> <br><small>Total Balance - Credit - Tip</small> </td>
<td id='f_after_confirm'> 35.47 </td>
</tr>
</tbody>
</table>
问题是由于浮点计算不一致造成的。您可以在评论中提到的 link @Alexis 阅读更多相关信息,here。
要解决您的实际问题,您可以对最终求和值调用 toFixed()
以将其格式化为所需的小数位数。试试这个:
$("select[name='tip']").on('change', function() {
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text()).toFixed(2);
var total_balance = parseFloat($("#f_total_balance").text()).toFixed(2);
var tip = parseFloat(thiz.val()).toFixed(2);
var final = (total_balance - content_credit - tip).toFixed(2);
console.log(final);
$("#f_after_confirm").text(final);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong>
</td>
<td id='f_total_balance'>45.67</td>
</tr>
<tr>
<td> <strong>Credit</strong>
</td>
<td id='f_content_credit'>10.20</td>
</tr>
<tr>
<td> <strong>TIP BOX</strong>
</td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | works now</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | works now</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong>
<br><small>Total Balance - Credit - Tip</small>
</td>
<td id='f_after_confirm'>35.47</td>
</tr>
</tbody>
</table>
与Math.round(100 * tot) / 100;
一起使用它将固定为.12
位
$("select[name='tip']").on('change',function(){
var thiz = $(this);
var content_credit = parseFloat($("#f_content_credit").text());
var total_balance = parseFloat($("#f_total_balance").text());
var tip = parseFloat(thiz.val());
var tot = total_balance-content_credit-tip;
var cal = Math.round(100 * tot) / 100;
console.log(cal);
$("#f_after_confirm").text(cal);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered table-hover">
<tbody>
<tr>
<td> <strong>Total Balance</strong> </td>
<td id='f_total_balance'> 45.67 </td>
</tr>
<tr>
<td> <strong>Credit</strong> </td>
<td id='f_content_credit'> 10.20 </td>
</tr>
<tr>
<td> <strong>TIP BOX</strong></td>
<td>
<select name="tip" class='form-control'>
<option value="0" selected>0 Kredi</option>
<option value="0.10">0.1 credit</option>
<option value="0.20">0.2 credit | not working</option>
<option value="0.30">0.3 credit</option>
<option value="0.80">0.8 credit</option>
<option value="1.20">1.2 credit | not working</option>
</select>
</td>
</tr>
<tr>
<td> <strong>After Confirm Calculation</strong> <br><small>Total Balance - Credit - Tip</small> </td>
<td id='f_after_confirm'> 35.47 </td>
</tr>
</tbody>
</table>