6
votes

Échelle et précision du nombre

Je cherche à obtenir la balance et la précision d'un numéro dans l'exemple suivant.

var x = 1234.567;

Je ne vois aucun .CALE ou .precision Fonctions intégrées et je ne suis pas sûr de la meilleure façon de la bonne façon.


5 commentaires

Quelles sont ces échelle et la précision? Voulez-vous dire le nombre de chiffres de chaque côté du point?


Convertissez en une chaîne, puis faites Split et voyez la longueur de la chaîne.


Est-ce que cela a du sens avec le point flottant? Considérons 0,1 + 0,1 + 0,1 . Vous vous attendez à ce que ce soit 0.3 . Eh bien ce n'est pas. C'est 0.3000000000000000004 . Soudainement, votre précision a frappé.


@Eric il n'utilise pas les chiffres de calcul.


@Vision: Même donc, il y a des problèmes de points flottants ici. Si vous n'utilisez pas de chiffres pour calculer, rangez-les comme une chaîne!


3 Réponses :


5
votes
var x = 1234.567

x.toString().indexOf('.'); // output: 4

1 commentaires

La précision doit être la longueur totale moins la., Je suppose qu'une fois que vous le convertiez à une chaîne, vous supprimeriez le. et avoir la longueur? Excellent moyen d'obtenir l'avant et après. Y a-t-il un bon moyen de déterminer si la chaîne contient le. Avant d'exécuter le script?



4
votes

Une autre solution avancée (si je comprends correctement ce que vous entendez par échelle et précision ): xxx

si le nombre n'est pas float Fonction renvoie null .


15 commentaires

Que recommanderiez-vous quand un numéro contient plus d'un seul point décimal?


Exemple 123.456.7, je vois pour la précision que vous soustrayez -1 lorsque vous voyez la décimale qui causerait la véritable longueur de précision. Je me demandais simplement quelles étaient vos pensées sur cela.


@George Comment est-il possible qu'un nombre contienne plus qu'un point décimal?


@George Il est impossible en JavaScript (et dans d'autres langages de programmation, je sais) avoir un numéro numéro avec deux points décimaux ou plus.


Je comprends d'où viennent votre venue, mais j'accepte des valeurs des champs de saisie qui pourraient survenir en tant que chaînes. Je pense avoir juste besoin de faire un chèque de type pour être sûr qu'il est un nombre et non d'une chaîne.


Les adresses IP ont plusieurs points décimaux mais ne sont pas en réalité de chiffres. Outre cela, je ne peux penser à aucune situation de plusieurs points décimaux doivent être des poignées.


@George Ensuite, nous pouvons inclure «la trimmer» des problèmes possibles provenant du champ de saisie. J'ai utilisé Paysfloat , vérifiez-le dans la réponse mise à jour.


@George valeurs acceptant du champ de saisie traitera toujours en tant que chaîne


Vous avez raison, j'ajoute un nouveau validateur à un projet de validation existant et que certains se trouvent que la logique JS convertit le type avant d'être transmise à ma nouvelle méthode, c'est-à-dire qu'elle pourrait venir à moi une chaîne. Désolé pour la confusion.


@thecodeparadox mec, juste pour connaître votre opinion, comment pensez-vous ce qui ne va pas avec mon approche? Je ne peux toujours pas comprendre les descentes sur SO: /


J'ai l'impression d'avoir expliqué ce qui se passait réellement un peu mieux, mais vous m'avez montré comment obtenir la précision.


@thecodeparadox no non! Je ne dis pas que tu m'as révoqué, non! Je ne peux tout simplement pas comprendre où est le problème dans ma solution. Peut-être que je manque quelque chose.


@Vision nous n'avons rien à dire sur le choix de OP, je pense que votre solution était si bonne


J'aime les deux et utilisé les deux, les deux sont de grandes réponses, mais malheureusement, vous ne pouvez sélectionner que l'une comme meilleure réponse et je viens de sentir que TheCodeparadox a fait un bon travail offrant des explications aux différentes pièces de code qui aideront à terme les autres à l'avenir. J'apprécie votre aide, car à la fin de la journée, mon problème a été résolu.


Personnellement pense que cette solution est excellente et exactement ce dont j'avais besoin, malgré tous les commentaires ...



6
votes

Vous pouvez utiliser: xxx


0 commentaires