parseFloat arrondissement

J'ai de la fonction javascript qui ajoute automatiquement les champs d'entrée ensemble, mais en ajoutant des chiffres comme 1.35 + 1.35 + 1.35 donne-moi une sortie de 4.050000000000001, tout comme un exemple. Comment puis-je arrondir le total à la deuxième décimale au lieu de cette longue chaîne de caractères?

Les champs de saisie aura plus que juste l'1.35 exemple j'ai donc besoin d'un total de ne jamais avoir plus de 2 points après la virgule. Voici tout le code de travail:

<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é, qui devrait fonctionner, mais je suis clairement les mettre en œuvre 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)

Ont également pas eu de chance avec Math.floor

  • Vous n'avez pas vraiment besoin de poster tout le code, car il n'est pas vraiment pertinent à la question ici. Seuls les postes pertinents bits.
  • Pour info: Votre deuxième (liées à toFixed) extrait a une erreur de syntaxe.
  • Pour référence future, il a été résolu grâce à @marcog en utilisant: document.form0.total.value = total.toFixed(2);
  • N'est-il pas la peine de comprendre pourquoi la somme est égale à un si long nombre de décimales?
  • Pour une référence future: car comment Javascript gère les valeurs flottantes, le nombre de 1,35 ne Peuvent pas être exactement enregistrée dans une variable, ou même calculé. Essayez ceci dans une console Javascript (1.35).toPrecision(52), il va vous montrer que la valeur réelle ou 1.35 en Javascript est 1.350000000000000088817841970012523233890533447265625 (toutes les décimales au-delà qui sont toutes à 0).
InformationsquelleAutor JB. | 2011-01-09