Convertit une chaîne en nombre décimal, en gardant les fractions
Je suis en train de convertir 1200.00
à decimal
, mais Decimal.Parse()
supprime .00
. J'ai essayé différentes méthodes, mais elle supprime toujours .00
, sauf quand je approvisionnement en une fraction différente de 0.
string value = "1200.00";
Méthode 1
var convertDecimal = Decimal.Parse(value , NumberStyles.AllowThousands
| NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);
Méthode 2
var convertDecimal = Convert.ToDecimal(value);
Méthode 3
var convertDecimal = Decimal.Parse(value,
NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
Comment puis-je convertir un string
contenant 1200.00
à un decimal
contenant 1200.00
?
- Je pense que les zéros sont implicites. Le ".00" partie existe dans la virgule, même si vous ne les voyez pas. Pour des raisons de formatage vous devez leur montrer, mais plutôt que vous n'avez pas à vous inquiéter.
- Non,
decimal
maintient l'échelle appropriée.decimal.Parse("1200.000")
etdecimal.Parse("1200.00")
sera de retour de valeurs distinctes, la préservation de la nombre de de fuite 0s. - Je suis d'accord avec @NelsonMiranda. En fait décimal.Parse("1200.000").Equals(décimal.Parse("1200.00")) renvoie true, alors je ne vois pas l'intérêt pour cette question....
- Je confirme, c'est un problème pour les non-US-localisation. J'ai mon pc est configuré avec l'italien locale et à la virgule.Parse("1200.00") renvoie 120000, tout en décimal.Parse("1200,00") renvoie 1200.00
Vous devez vous connecter pour publier un commentaire.
Hmm... je ne peux pas reproduire ce:
Êtes-vous sûr que ce n'est pas une autre partie de votre code de la normalisation de la valeur décimale plus tard?
Seulement en cas de questions culturelles, essayez cette version qui ne doit pas dépendre de vos paramètres régionaux:
Je pense que votre problème est lors de l'affichage de la virgule, pas le contenu de celui-ci.
Si vous essayez
s
contiendra la chaîne"1200"
.Toutefois, si vous modifiez votre code pour cette
s
contiendra la chaîne"1200.00"
que vous voulez qu'il fasse.MODIFIER
Semble que je suis braindead tôt dans la matinée d'aujourd'hui. J'ai ajouté le
Parse
les états. Cependant, même mon premier code de sortie "1200.00", même si je m'attendais à la sortie de "1200". Me semble que je suis en train d'apprendre quelque chose chaque jour, et dans ce cas, évidemment, quelque chose qui est assez basique.Donc ignorer cette une réponse appropriée. Nous aurons probablement besoin de plus de code pour identifier votre problème dans ce cas.
decimal
représentation interne stocke le nombre de décimales des zéros même si mathématiquement, ils ne sont pas pertinents. Ainsi, alors quedecimal.Parse("1200.00") == decimal.Parse("1200")
la.ToString()
valeurs sont "1200.00" & "1200", respectivement. L'OP n'a pas besoin de spécifier le nombre de décimales dans le.ToString()
méthode.Bonjour j'ai la même question, mais c'est facile, il suffit de faire ceci:
string cadena="96.23";
decimal NoDecimal=decimal.parse(cadena.replace(".",","))
Je pense que c'est car la notation accepter C# sur les nombres décimaux sont avec un ","
Le code ci-dessous imprime la valeur de 1200.00.
Pas sûr de ce que vous attendez?
Utiliser cet exemple
Voici une solution je suis venu avec moi-même. C'est prêt à être exécuté comme une commande à l'invite de projet. Vous avez besoin de nettoyer certaines choses si ce n'. Espérons que cette aide. Il accepte plusieurs formats d'entrée comme: 1.234.567,89 1,234,567.89 etc
L'utilisation de la classe CultureInfo a travaillé pour moi, j'espère vous aider.
La valeur est la même, même si la représentation imprimée n'est pas ce que vous attendez:
Vous pouvez essayer d'appeler cette méthode dans vous programme:
Exemple:
décimal d = 3.00 est toujours 3.
Je suppose que vous voulez le montrer certains où sur l'écran ou l'imprimer sur le fichier de log comme 3.00.
Vous pouvez le faire à la suite
ou si vous utilisez la base de données pour stocker la décimale, alors vous pouvez définir pricision valeur dans la base de données.
c'est ce que vous avez à faire.
Cela a fonctionné pour moi. Merci.