gpt4 book ai didi

JavaScript 计算两个输入中的错误百分比

转载 作者:行者123 更新时间:2023-12-03 07:31:38 25 4
gpt4 key购买 nike

我有以下输入:

cost,我在其中输入货币值,例如 6,23profit,在其中输入百分比值,例如 29,21value,其中显示两个值的总和。

JavaScript 进行数学计算,并以 value 的形式返回给我,即 cost 的值 + 在 profit 中输入的百分比的货币值,其中这种情况下,结果为 8,05 (6,23 + 29,21%)。

但如果尝试做同样的事情,但通知 value 而不是 profit,如相同的 8,05,那么 JavaScript 会返回给我 29,21利润,但它返回给我 36,44

有人知道它是什么吗?

这是我的代码:

$(document).ready(function () {
$(".valor").on("input", function () {
// Margem
var valor = $(this).val();
var valorCorrigido = parseFloat(adicionarPontos(valor));

var valorFloat = parseFloat(valorCorrigido) || 0.0;

// Custo
var valorCusto = $('#custo').val();
var valorCustoCorrigido = parseFloat(removerPontos(valorCusto));
var valorCustoFloat = parseFloat(valorCustoCorrigido) || 0.0;

// Calculo
var calculo = (parseFloat(valorFloat) - parseFloat(valorCustoFloat)) / parseFloat(valorCustoFloat) * 100;
var inputMargem = $(this).attr("margem");

$("#" + inputMargem).val(calculo.toFixed(2)).trigger('blur');
});
// Faz o calculo do valor com base na margem
$(".margem").on("input", function () {
// Margem
var valorMargem = $(this).val();
var valorMargemCorrigido = parseFloat(adicionarPontos(valorMargem));
var valorMargemFloat = parseFloat(valorMargemCorrigido) || 0.0;

// Custo
var valorCusto = $('#custo').val();
var valorCustoCorrigido = parseFloat(removerPontos(valorCusto));
var valorCustoFloat = parseFloat(valorCustoCorrigido) || 0.0;

// Cálculo
var calculo = (parseFloat(valorCustoFloat) * parseFloat(valorMargemFloat) / 100) + parseFloat(valorCustoFloat);
var inputValor = $(this).attr("valor");

var resultadoMonetario = calculo.toFixed(2).toString();
resultadoMonetario = resultadoMonetario.replace(".", ",");

$("#" + inputValor).val(resultadoMonetario).trigger('blur');
});

function removerPontos(valor){
valor = valor.replace(".","");
valor = valor.replace(",",".");
return valor;
}

function adicionarPontos(valor){
if(valor.length == 1){
return valor;
}
else{
if(valor.length == 2){
return valor;
}
else{

// The problem was here

valor = valor.replace(",","");
var inteiro = valor.substring(0,valor.length - 2);
var decimal = valor.substr(2);
return inteiro + "." + decimal;
}
}
}
});

$('input').mask('00.000.000,00', {
reverse: true
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.13.4/jquery.mask.js"></script>


Custo:
<input type='text' id='custo' class='custo valores' name='custo'>
<br>
<br> Valor:
<input type='text' id='valor1' class='valor valores' name='valor1' margem='margem1'> Margem:
<input type='text' id='margem1' class='margem valores' name='margem1' valor="valor1">

<br> Valor:
<input type='text' id='valor2' class='valor valores' name='valor2' margem='margem2'> Margem:
<input type='text' id='margem2' class='margem valores' name='margem2' valor="valor2">

最佳答案

计算似乎不正确,因为 JavaScript 中的小数分隔符未本地化。

6,23 * 29,21 // 21

6.23 * 29.21 // 181.97830000000002

parseFloat(6,23); // 6

parseFloat(6.23); // 6.23

您可以使用Number.prototype.toLocaleString()或货币格式化插件来格式化显示的值,但您的 custovalormargem 值应使用 进行格式化. 进行计算时的小数点分隔符。

关于JavaScript 计算两个输入中的错误百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35798507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com