6
votes

Prévenir la double.Parse de supprimer des zéros traînants après un endroit décimal?

Lorsque vous utilisez DOWN.PARSE, il semble que vous souhaitiez des zéros de fin (insignifiant) de la chaîne que je convoite. Je voudrais doubler.parrs pour garder les endroits après la décimale. Par exemple, voici quelques codes: xxx

Le débogueur écrit alors

converti de 4,00 à 4

Il semble donc que double.parse est faire quelque chose de poisson ici. P.s. La moussensibilité est également du type double, donc je ne peux pas faire d'opérations de chaîne dessus.


1 commentaires

Je ne pense pas que double.Parse fait quelque chose d'étrange / poisson. La fonction Number.FormatDouble () est probablement ce qui rend votre numéro sans les décimales. (la fonction qui double.Tostring () appelle.)


4 Réponses :


0
votes

Si vous savez que vous voulez toujours deux endroits après la décimale, vous pouvez remplir à droite avec des zéros.

Ce n'est pas le travail du double type à garder une trace du format d'affichage souhaité.


1 commentaires

Remplir de droite avec des zéros? Avec string.format?



2
votes

Le type de données double est simplement un numéro; Il ne reste pas une trace de la chaîne qui a été analysée pour créer la valeur. Sa représentation de chaîne n'entre en jeu que lorsque .tostring () est appelé.


0 commentaires

0
votes

Double ne stocke pas les zéros redondants. Dans votre couche d'affichage ou de présentation, vous voudrez peut-être le formater pour montrer que vous souhaitez qu'il apparaisse, par exemple, string.format ("{0: #. ##}", doublevariable)


2 commentaires

Donc, si ma vue est une propriétéGratie, qui lit directement à partir de la variable, devrais-je simplement modifier cette variable en une chaîne et exécuter une correspondance de regex à ce sujet lorsque cela est modifié, pour vous assurer qu'il ne contient que des chiffres et une décimale?


NOPERS, activez simplement le commutateur HTML et utilisez la formation {0: F2} dans la marque UP



4
votes

Votre question n'a pas de sens. Doubles ne ont "lieux après la décimale" en premier lieu. Ils ne stockent rien qui a l'air à distance comme une "représentation décimale d'un numéro" en interne. En fait, ils ne stockent rien en interne qui ressemble même à un texte reconnaissable.

IT RAPPORT 4 car 4,00 est exactement égal à 4. Il affiche le nombre "exactement quatre sans partie de fractionnelle" comme texte en fonction de ses règles par défaut pour convertir des numéros en texte.

Veuillez lire Ceci . Oui, c'est long, et difficile, mais il n'est tout simplement pas possible d'utiliser des types numériques à virgule flottante correctement sans une compréhension réelle de ce matériau - et il ne le fait pas Peu importe la langue que vous utilisez, non plus.


4 commentaires

Merci d'avoir expliqué cela à moi. Je peux comprendre pourquoi il veut couper des figures insignifiantes, même si j'ai du mal à comprendre ce que vous voulez dire lorsque vous dites "Doubles n'a pas" des endroits après la décimale "en premier lieu". Selon msdn.microsoft.com/ EN-US / Bibliothèque / ... , il semble qu'ils font: \


Avoir des "places après la décimale", le nombre devrait être représenté en décimal (c'est-à-dire la base 10). Ce n'est pas. Il est représenté en binaire (c'est-à-dire base 2).


Si tel était le cas, alors ne pourrions-nous jamais ne jamais avoir un nombre plus grand qu'un nombre de base 2? Je veux dire, oui, je sais qu'il doit être stocké dans la mémoire de l'ordinateur à un moment donné (sous forme binaire), mais le compilateur ne prend pas de mesures pour que le nombre soit identique une fois qu'il est lu de la mémoire à nouveau?


"Plus grand nombre d'un numéro de base 2" n'a pas de sens. La base dans laquelle vous représentez un nombre ne limite pas la gamme de nombres possibles; Cela dépend aussi du nombre de chiffres / bits que vous utilisez. Le compilateur n'a pas besoin de prendre de telles mesures. Le nombre est le nombre - lequel n'est pas la même chose que sa représentation dans le texte. Lorsque le numéro est lu, il existe une conversion du texte au format numérique interne; Et lorsque le numéro est affiché, il y a une conversion au texte. Ces conversions ne s'annulent pas les unes des autres et il n'y a aucune raison en général de les attendre.