Formatage en double sous forme de chaîne en C #
J'ai un Double de ce qui pourrait avoir une valeur de autour de 0.000001 à 1 000 000 000 d'.000
Je tiens à le format de ce numéro comme un string, mais conditionnellement selon sa taille. Donc si c'est très petit je veux le formater avec quelque chose comme:
String.Format("{0:.000000000}", number);
si ce n'est pas que les petits, dire 0.001 alors je veux utiliser quelque chose comme
String.Format("{0:.00000}", number);
et si c'est plus, disons de 1 000 ensuite le format:
String.Format("{0:.0}", number);
Est-il un moyen astucieux pour construire ce format de chaîne de caractères en fonction de la taille de la valeur que je vais format?
source d'informationauteur Guy
Vous devez vous connecter pour publier un commentaire.
Utilisent Les Mathématiques.Log10 de la valeur absolue de la double à la figure combien de 0 vous avez besoin de gauche (si positif) ou à droite (si négatif) de la virgule. Choisissez le format de chaîne en fonction de cette valeur. Vous aurez besoin de manipuler des valeurs égales à zéro séparément.
Ou construire dynamiquement en fonction du nombre de chiffres.
Utiliser le caractère # en option positions dans la chaîne:
Je ne pense pas que vous pouvez contrôler le nombre de décimales comme celle de la précision de la double sera susceptible de gâcher les choses.
Pour encapsuler la logique de décider du nombre de décimales à la sortie on pourrait voir la création d'une mise en forme personnalisée.
La première Chaîne de deux.Format dans votre question peut être résolu en supprimant automatiquement les zéros de fin:
Et le dernier que vous pourriez résoudre par l'appel de Mathématiques.Round(nombre,1) pour des valeurs de plus de 1000, puis utilisez la même Chaîne.Format.
Quelque chose comme:
Suivi OwenP (et par "extension" tvanfosson):
Si c'est assez commun, et vous êtes sur de C# 3.0, je voudrais la transformer en une méthode d'extension sur le double:
Maintenant, partout où vous disposez d'un double que vous pouvez faire:
Si c'était moi, je ferais une classe wrapper personnalisé et de mettre tvanfosson du code dans son
ToString
méthode. De cette façon, vous pouvez toujours travailler avec le double de la valeur, mais vous obtiendrez le droit de représentation de chaîne dans à peu près tous les cas. Ce serait ressembler à quelque chose comme ceci:Peut-être il pourrait être préférable d'en faire une struct, mais je doute que cela ferait une grande différence. Vous pouvez utiliser la classe comme ceci: