jquery parseFloat,parseInt
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4269775/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
jquery parseFloat, parseInt
提问by deepcell
I have the following situation, I'm using jquery and I need to sum up some fields on my form.
I have found the NaN error in my subtotal fieldand total field.I have tried everything possible to avoid this type of error, I just need the SUM on this field.
Everything in my form is working fine, only this 2 fields with a problem.
I'm using parseFloat()
and no response. Only a field with NaN
我有以下情况,我正在使用 jquery,我需要总结表单上的一些字段。我在小计字段和总计字段中发现了 NaN 错误。我已尽一切可能避免此类错误,我只需要该字段上的 SUM。我表单中的所有内容都运行良好,只有这 2 个字段有问题。我正在使用parseFloat()
,没有任何反应。只有一个带有NaN的字段
Follow my javascript code:
按照我的 javascript 代码:
$(document).ready( function() {
$('#valor, #taxa, #imposto, #envio, #taxa_adicional, #subtotal, #total').blur(function(){
// exemplo antigo var val = $('#valor').val();
var val = $('#valor').format({format:"#,###.00", locale:"br"});
var tax = $('#taxa').format({format:"#,###.00", locale:"br"});
var imp = $('#imposto').format({format:"#,###.00", locale:"br"});
var env = $('#envio').format({format:"#,###.00", locale:"br"});
var xat = $('#taxa_adicional').format({format:"#,###.00", locale:"br"});
if(val == "") val = 0;
if(tax == "") tax = 0;
if(imp == "") imp = 0;
if(env == "") env = 0;
if(xat == "") xat = 0;
var subtotal = parseFloat("val") + parseFloat("tax") + parseFloat("imp") + parseFloat("env");
var total = parseFloat(val) + parseFloat(tax) + parseFloat(imp) + parseFloat(env) + parseFloat(xat);
$('#subtotal').format({format:"#,###.00", locale:"br"});
$('#total').val(total);
})
});
Thanks in advance for any help on this matter! :-/
在此先感谢您对此事的任何帮助!:-/
WARNING:I'm using a plugin called:
jquery.numberformatter - Formatting/Parsing Numbers in jQuery Written by Michael Abernethy
警告:我正在使用一个名为:
jquery.numberformatter - jQuery 中的格式化/解析数字的插件,作者 Michael Abernethy
回答by ?ime Vidas
HTML:
HTML:
<div id="box">
<p> Valor: <input id="valor"> </p>
<p> Taxa: <input id="taxa"> </p>
<p> Imposto: <input id="imposto"> </p>
<p> Envio: <input id="envio"> </p>
<p> Taxa adicional: <input id="taxa_adicional"> </p>
<p> Subtotal: <span id="subtotal">0</span> </p>
<p> Total: <span id="total">0</span> </p>
</div>
JavaScript:
JavaScript:
var options = {
format: '#,###.00',
locale: 'br'
},
inputs = $( 'input:text', '#box' ).get(),
input_adicional = $( '#taxa_adicional' )[0],
input_total = $( '#total' )[0],
input_subtotal = $( '#subtotal' )[0];
and then:
进而:
$( inputs ).add( [ input_total, input_subtotal ] ).format( options );
$( inputs ).
blur( function () {
var total = 0,
subtotal = 0;
// on blur, format the field
$( this ).format( options );
// calculate the sum of all input fields
$( inputs ).each( function () {
total += +$( this ).parse( options );
});
// subtotal doesn't include the "additional" field
subtotal = total - $( input_adicional ).parse( options );
// populate the SPAN's with the sums and format the nubmers
$( input_subtotal ).text( subtotal ).format( options );
$( input_total ).text( total ).format( options );
}).
focus( function () {
// if the field contains the value 0, empty it
if ( +$( this ).parse( options ) === 0 ) {
this.value = '';
}
});
Live demo:http://jsfiddle.net/U9V6x/
现场演示:http : //jsfiddle.net/U9V6x/
回答by James Kovacs
When you're calculating your subtotal, you are calling parseFloat() on a series of strings, not the variables themselves. The line should be:
当您计算小计时,您是在一系列字符串上调用 parseFloat(),而不是变量本身。该行应该是:
var subtotal = parseFloat(val) + parseFloat(tax) + parseFloat(imp) + parseFloat(env);
回答by jcolebrand
It looks like you're using this plugin: http://code.google.com/p/jquery-numberformatter/
看起来您正在使用此插件:http: //code.google.com/p/jquery-numberformatter/
That plugin will take an element, parse the value according to the format, and reinsert it into the DOM, from what I can tell. So I'm going to assume that's the case.
据我所知,该插件将获取一个元素,根据格式解析该值,然后将其重新插入到 DOM 中。所以我假设情况就是这样。
$(document).ready( function() {
$('#valor, #taxa, #imposto, #envio, #taxa_adicional, #subtotal, #total').blur(function(){
/*
// first update all fields to have the correct format, so we can work with them later.
$('#valor').format({format:"#,###.00", locale:"br"});
$('#taxa').format({format:"#,###.00", locale:"br"});
$('#imposto').format({format:"#,###.00", locale:"br"});
$('#envio').format({format:"#,###.00", locale:"br"});
$('#taxa_adicional').format({format:"#,###.00", locale:"br"});
*/
//separating because I'm pretty sure this would work in place of all those lines of code:
// needs testing though. If this doesn't work uncomment the previous block and delete this line
$('#valor,#taxa,#imposto,#envio,#taxa_adicional').format({format:"#,###.00", locale:"br"});
// then since the values have been formatted, let's extract just the floats like you wanted
// going through the document.getElementById since the jQuery wrapper is useless overhead and you don't need a jQuery object back out.
var val = parseFloat( document.getElementById('val').innerHTML );
var tax = parseFloat( document.getElementById('taxa').innerHTML );
var imp = parseFloat( document.getElementById('imposto').innerHTML );
var env = parseFloat( document.getElementById('envio').innerHTML );
var xat = parseFloat( document.getElementById('taxa_adicional').innerHTML );
if( isNaN( val ) ) val = 0;
if( isNaN( tax ) ) tax = 0;
if( isNaN( imp ) ) imp = 0;
if( isNaN( env ) ) env = 0;
if( isNaN( xat ) ) xat = 0;
var subtotal = val + tax + imp + env;
var total = val + tax + imp + env + xat;
$('#subtotal').val(subtotal).format({format:"#,###.00", locale:"br"});
$('#total').val(total).format({format:"#,###.00", locale:"br"});
});
});
Notice that I am only trying to help you have easier to read code. There are probably lots of ways to write this to get it leaner[1]
请注意,我只是想帮助您更容易阅读代码。可能有很多方法可以编写它以使其更精简[1]
[1] less fat; less waste; ~ Perhaps this translates, perhaps it is an idiom?
[1] 脂肪少;减少浪费;~ 也许这是翻译,也许是成语?
回答by Metagrapher
This should work for you:
这应该适合你:
$(document).ready( function() {
$(document).ready(function() {
$('#valor, #taxa, #imposto, #envio, #taxa_adicional, #subtotal, #total').blur(function(){
// exemplo antigo var val = $('#valor').val();
var val = $('#valor').format({format:"#,###.00", locale:"br"});
var tax = $('#taxa').format({format:"#,###.00", locale:"br"});
var imp = $('#imposto').format({format:"#,###.00", locale:"br"});
var env = $('#envio').format({format:"#,###.00", locale:"br"});
var xat = $('#taxa_adicional').format({format:"#,###.00", locale:"br"});
if(isNan(parseFloat(val))) val = 0;
if(isNan(parseFloat(tax))) tax = 0;
if(isNan(parseFloat(imp))) imp = 0;
if(isNan(parseFloat(env))) env = 0;
if(isNan(parseFloat(xat))) xat = 0;
var subtotal = parseFloat("val") + parseFloat("tax") + parseFloat("imp") + parseFloat("env");
var total = parseFloat(val) + parseFloat(tax) + parseFloat(imp) + parseFloat(env) + parseFloat(xat);
$('#subtotal').format({format:"#,###.00", locale:"br"});
$('#total').val(total);
})
});
});