2017-08-28 3 views
-1

Je travaille avec une autre base de code sur laquelle je n'ai aucun contrôle et que je ne peux pas voir. Je peux lui envoyer des entrées et il me retournera des sorties. Cette base de code ne spécifie pas non plus dans quoi elle est écrite, mais cela n'a pas d'importance puisque je n'ai besoin de lui transmettre que des nombres et qu'elle me renvoie ses numéros sortis. Je ne connais que les entrées et sorties attendues.JS-toFixed renvoie une chaîne, mais j'ai besoin d'un nombre à 6 chiffres

L'une des entrées que je dois travailler nécessite une entrée de 6 décimales. La plupart de mes nombres seront bien au-dessus de 6 décimales, donc je peux juste arrondir ou tronquer, mais dans le cas où il est arrondi à ou devient aléatoire un nombre comme 0.125 ou 0.5, je ne suis pas en mesure d'entrer le bon nombre. Par exemple, si j'ai un nombre comme 0.5, c'est un nombre valide et légitime, mais la fonction à laquelle je le saisis ne l'accepte pas et se trompe parce que ce n'est pas un nombre à exactement 6 décimales comme 0.500000 est. Je ne peux pas non plus entrer une chaîne de "0.500000", car elle va aussi errer car elle cherche un nombre, pas une chaîne.

Y at-il de toute façon en JavaScript natif une précision spécifique sur un nombre, même s'il y a des zéros morts supplémentaires à la fin?

Exemples:

(1/2).toFixed(6) === "0.500000" // the toFixed() function returns a *String*, not a *Number*. 

(1/2).toFixed(6) /1 === 0.5 // dividing by 1 coerces it to a Number, but drops the decimals back off the end. 

Number((1/2).toFixed(6)) === 0.5 // Trying to convert it into a Number using the Number Constructor does the same as the example above it. 

* EDIT: Pour être clair, je besoin d'un numéro à 6 décimales, pas une chaîne.

+1

Je ne comprends pas quel est le problème avec le premier exemple de code. – robertklep

+1

Il n'y a pas un tel nombre dans JS. + vous n'en avez même pas besoin. Lors de l'affichage, utilisez la représentation de la chaîne, lors du calcul avec le nombre, utilisez simplement la précision native. – Teemu

+0

Si vous voulez simplement afficher les chiffres, vous pouvez transformer le nombre en une chaîne et ajouter les zéros après la dernière décimale. – alexi2

Répondre

0

function myFunction() { 
 

 
     var a = (1/2).toFixed(6) + "<br>"; 
 
     var b = parseFloat(a).toFixed(6) + "<br>"; 
 
     
 
     var x = new Decimal(123.4567) + "<br>"; 
 
     var n = a + b + c; 
 
     document.getElementById("demo").innerHTML = n; 
 
    }
<script src="https://raw.githubusercontent.com/MikeMcl/decimal.js/master/decimal.min.js"> 
 
</script> 
 

 
<button onclick="myFunction()">Try it</button> 
 

 
    <p id="demo"></p>

Un certain nombre ne contient pas d'informations sur les chiffres significatifs; la valeur 2 est la même que 2.0000000000000. C'est quand vous tournez la valeur arrondie dans une chaîne que vous lui faites afficher un certain nombre de chiffres.

Il semble un peu étrange qu'une fonction nécessite un nombre décimal 6. Mais un coup d'oeil à cette bibliothèque, il a beaucoup de choses pour vous et peut vous aider à

Decimal

+0

Le code HTML est toujours du texte, donc il s'agit essentiellement de l'élément 1 de la liste OP. – Teemu

+0

C'est bien, mais je produis une autre fonction qui en a besoin pour être un nombre. Bien qu'il apparaisse ici comme 0.500000, si vous vérifiez réellement son type c'est typeof chaîne. Je dois sortir un nombre à 6 décimales. Lorsque vous essayez de transformer la chaîne de "0.500000" en un nombre que vous obtiendrez 0.5 –

+0

vérifier ma réponse mise à jour –

0

Essayez Number(1/2).toFixed(6), il renvoie ce dont vous avez besoin

+0

Ceci renvoie l'article 3 dans la liste des OP. – Teemu

+0

il renvoie "0.500000" qui, d'après ce que je comprends est ce qu'il veut ... Pas si clair si ... – JohnPan

+0

OP veut un nombre, pas une chaîne ... – Teemu

0

Fondamentalement 0.5 === 0.500000 si vous pensez mathématiquement.

console.log((1/2) + (1/1000000)); // this would print out 0.500001 

àFixed() est destiné à être utilisé à des fins d'affichage, je pense.

Que voulez-vous réaliser? Pourquoi ne pas utiliser l'utiliser comme une chaîne et utiliser parseFloat() lorsque vous avez besoin de faire des calculs?

+0

Je dois produire un nombre à une autre fonction qui l'utilise, et cette fonction est nécessaire pour prendre un nombre qui est au moins 6 décimales. Je n'ai aucun contrôle sur la fonction que je délivre, donc je dois sortir un nombre exactement à 6 décimales. La plupart des nombres seront au-dessus de 6 décimales, auquel cas je peux tronquer ou arrondir, mais pour les nombres inférieurs à 6 décimales ou les nombres arrondis à moins de 6 décimales, ce qui me pose un problème. Je pense que votre solution sera la meilleure prise de vue. –

+0

Où est cette fonction? Si c'est une fonction javascript, je ne comprends pas pourquoi il y a un contrôle pour les décimales. Si ce n'est pas comment vous déclenchez la fonction? – bennygenel