J'ai une fonction javascript qui ajoute automatiquement les champs de saisie ensemble, mais l'ajout de nombres comme 1,35 + 1,35 + 1,35 me donne une sortie de 4,050000000000001, juste à titre d'exemple. Comment puis-je arrondir le total à la deuxième décimale au lieu de cette longue chaîne?
Les champs de saisie auront plus que l'exemple 1,35, j'ai donc besoin du total pour ne jamais avoir plus de 2 points après la décimale. Voici le code de travail complet:
<html>
<head>
<script type="text/javascript">
function Calc(className){
var elements = document.getElementsByClassName(className);
var total = 0;
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value);
}
document.form0.total.value = total;
}
function addone(field) {
field.value = Number(field.value) + 1;
Calc('add');
}
</script>
</head>
<body>
<form name="form0" id="form0">
1: <input type="text" name="box1" id="box1" class="add" value="0" onKeyUp="Calc('add')" onChange="updatesum()" onClick="this.focus();this.select();" />
<input type="button" value=" + " onclick="addone(box1);">
<br />
2: <input type="text" name="box2" id="box2" class="add" value="0" onKeyUp="Calc('add')" onClick="this.focus();this.select();" />
<input type="button" value=" + " onclick="addone(box2);">
<br />
<br />
Total: <input readonly style="border:0px; font-size:14; color:red;" id="total" name="total">
<br />
</form>
</body></html>
Certaines choses que j'ai essayées, qui devraient fonctionner, mais je les applique clairement de manière incorrecte:
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value.toString().match(/^\d+(?:\.\d{0,2})?/));
var str = total.toFixed(2);
ou
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value * 100) / 100).toFixed(2)
N'ont également pas eu de chance avec Math.floor
Utilisez toFixed()
pour arrondir num
à 2 chiffres décimaux en utilisant la méthode d'arrondi traditionnelle. Il arrondira 4,050000000000001 à 4,05.
num.toFixed(2);
Vous préférerez peut-être utiliser toPrecision()
, qui supprimera les zéros de fin résultants.
Exemple :
1.35+1.35+1.35 => 4.050000000000001
(1.35+1.35+1.35).toFixed(2) => 4.05
(1.35+1.35+1.35).toPrecision(3) => 4.05
// or...
(1.35+1.35+1.35).toFixed(4) => 4.0500
(1.35+1.35+1.35).toPrecision(4) => 4.05
var num = 4.050000000000001;
num = num.toFixed(2);
toFixed
arrondira en fonction du nombre de chiffres après la décimale que vous recherchez.
Vous pouvez utiliser Math.round(total*100000000000)/100000000000;
dans le code. Cela fonctionnera pour la plupart des cas
Cela marche:
$(document).ready(
function() {
$('#field1').blur(function(){ $('#field2').val(parseFloat($(this).val() * 2.2).toFixed(1)); });
$('#field2').blur(function(){ $('#field1').val(parseFloat($(this).val() / 2.2).toFixed(1)); });
}
);
Cela échoue:
$(document).ready(
function() {
$('#field1').blur(function(){ $('#field2').val(parseFloat($(this).val() * 2.2)).toFixed(1); });
$('#field2').blur(function(){ $('#field1').val(parseFloat($(this).val() / 2.2)).toFixed(1); });
}
);
Faites donc attention à la façon dont vous placez vos parenthèses () ... Dans le premier cas, l'arrondi fonctionnera, mais ne fonctionnera pas dans le second ...
Au lieu d'arrondir, vous pouvez utiliser le port de Java BigDecimal pour obtenir des mathématiques décimales réellement précises.