JS:计算有点和逗号的值(即 1.000,00)
JS: Calculating values that have dot and comma (i.e 1.000,00)
我有一个使用 jQuery 计算货币的脚本。它工作正常,但是当我写一个大于 999,99
的值时,当我使用掩码并将结果转换为货币格式时,它 returns 一个错误的值。我该如何解决?
已更新
$(document).ready(function() {
$('.money').mask("#.##0,00", {reverse: true});
});
accounting.settings = {
currency: {
symbol : "", // default currency symbol is '$'
format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
decimal : ",", // decimal point separator
thousand: ".", // thousands separator
precision : 2 // decimal places
},
number: {
precision : 0, // default precision on numbers is 0
thousand: ".",
decimal : ","
}
}
function calc(){
var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
result = accounting.formatMoney(result);
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>
<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="text" class="money" value="100000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
- 您没有使用
meses
变量
当对字符串使用.replace
时,它只会替换一次。与正则表达式一起使用时,它会替换所有出现的
gasto.replace(/,/gi,'.').replace(/ /gi,'')
这样可以正确替换字符串
您需要记住,当从 select
中获取 .val()
时,它以字符串形式出现,您应该在进行一些计算之前对其进行解析。
另外,我不知道你为什么要用input type="tel"
作为数字,用type="number"
下面的代码正在运行,没有显示 NaN
...我只是不知道计算结果是否是您要查找的结果,
OBS:不能像1.234,55
那样使用#gasto_contabilidade
中的值,必须是1234.55
或1234,55
(这个只是因为你要替换 ,
.
function calc(){
var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="number" class="valor" value="1000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
很好,谢谢,但是如果我用 accounting.js 格式化值,它就不能很好地工作,请看:
$(document).ready(function() {
$('.money').mask("#.##0,00", {reverse: true});
});
accounting.settings = {
currency: {
symbol : "", // default currency symbol is '$'
format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
decimal : ",", // decimal point separator
thousand: ".", // thousands separator
precision : 2 // decimal places
},
number: {
precision : 0, // default precision on numbers is 0
thousand: ".",
decimal : ","
}
}
function calc(){
var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
result = accounting.formatMoney(result);
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>
<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>
<script>
</script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="text" class="money" value="100000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
修复:
我解决了在计算之前删除点的问题
var gasto = $("#gasto_contabilidade").val().replace(".", '');
谢谢大家的帮助!
$(document).ready(function() {
$('.money').mask("#.##0,00", {reverse: true});
});
accounting.settings = {
currency: {
symbol : "", // default currency symbol is '$'
format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
decimal : ",", // decimal point separator
thousand: ".", // thousands separator
precision : 2 // decimal places
},
number: {
precision : 0, // default precision on numbers is 0
thousand: ".",
decimal : ","
}
}
function calc(){
var gasto = $("#gasto_contabilidade").val().replace(".", ''); // FIX
plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
gasto = parseFloat(gasto.replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
result = accounting.formatMoney(result);
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>
<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>
<script>
</script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="text" class="money" value="100000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
我有一个使用 jQuery 计算货币的脚本。它工作正常,但是当我写一个大于 999,99
的值时,当我使用掩码并将结果转换为货币格式时,它 returns 一个错误的值。我该如何解决?
已更新
$(document).ready(function() {
$('.money').mask("#.##0,00", {reverse: true});
});
accounting.settings = {
currency: {
symbol : "", // default currency symbol is '$'
format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
decimal : ",", // decimal point separator
thousand: ".", // thousands separator
precision : 2 // decimal places
},
number: {
precision : 0, // default precision on numbers is 0
thousand: ".",
decimal : ","
}
}
function calc(){
var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
result = accounting.formatMoney(result);
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>
<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="text" class="money" value="100000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
- 您没有使用
meses
变量 当对字符串使用
.replace
时,它只会替换一次。与正则表达式一起使用时,它会替换所有出现的gasto.replace(/,/gi,'.').replace(/ /gi,'')
这样可以正确替换字符串
您需要记住,当从 select
中获取 .val()
时,它以字符串形式出现,您应该在进行一些计算之前对其进行解析。
另外,我不知道你为什么要用input type="tel"
作为数字,用type="number"
下面的代码正在运行,没有显示 NaN
...我只是不知道计算结果是否是您要查找的结果,
OBS:不能像1.234,55
那样使用#gasto_contabilidade
中的值,必须是1234.55
或1234,55
(这个只是因为你要替换 ,
.
function calc(){
var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="number" class="valor" value="1000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
很好,谢谢,但是如果我用 accounting.js 格式化值,它就不能很好地工作,请看:
$(document).ready(function() {
$('.money').mask("#.##0,00", {reverse: true});
});
accounting.settings = {
currency: {
symbol : "", // default currency symbol is '$'
format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
decimal : ",", // decimal point separator
thousand: ".", // thousands separator
precision : 2 // decimal places
},
number: {
precision : 0, // default precision on numbers is 0
thousand: ".",
decimal : ","
}
}
function calc(){
var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
result = accounting.formatMoney(result);
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>
<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>
<script>
</script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="text" class="money" value="100000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
修复:
我解决了在计算之前删除点的问题
var gasto = $("#gasto_contabilidade").val().replace(".", '');
谢谢大家的帮助!
$(document).ready(function() {
$('.money').mask("#.##0,00", {reverse: true});
});
accounting.settings = {
currency: {
symbol : "", // default currency symbol is '$'
format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
decimal : ",", // decimal point separator
thousand: ".", // thousands separator
precision : 2 // decimal places
},
number: {
precision : 0, // default precision on numbers is 0
thousand: ".",
decimal : ","
}
}
function calc(){
var gasto = $("#gasto_contabilidade").val().replace(".", ''); // FIX
plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
gasto = parseFloat(gasto.replace(/\./g, ',').replace(/,/g, '.'));
var meses = parseInt( $("#meses").val());
var resultado_gasto = parseFloat(gasto * meses);
var resultado_plano = parseFloat(plano * meses);
var result = resultado_gasto - resultado_plano;
result = accounting.formatMoney(result);
console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>
<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>
<script>
</script>
<select name="" id="regimento" class="select">
<option value="19,90">MEI</option>
<option value="85,90">SIMPLES SERVIÇO</option>
<option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>
<input id="gasto_contabilidade" type="text" class="money" value="100000">
<select id="meses" class="select">
<option value="12">12</option>
<option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">