J'essaie de convertir 1200.00
en decimal
, mais Decimal.Parse()
supprime .00
. J'ai essayé différentes méthodes, mais cela supprime toujours .00
, sauf lorsque je fournis une fraction différente de 0.
string value = "1200.00";
var convertDecimal = Decimal.Parse(value , NumberStyles.AllowThousands
| NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);
var convertDecimal = Convert.ToDecimal(value);
var convertDecimal = Decimal.Parse(value,
NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
Comment convertir une string
contenant 1200.00
en une decimal
contenant 1200.00
?
Hmm ... Je ne peux pas reproduire ceci:
using System;
class Test
{
static void Main()
{
decimal d = decimal.Parse("1200.00");
Console.WriteLine(d); // Prints 1200.00
}
}
Êtes-vous sûr que ce n'est pas une autre partie de votre code normalisant la valeur décimale plus tard?
Juste au cas où il y aurait des problèmes culturels, essayez cette version qui ne devrait pas dépendre de vos paramètres régionaux:
using System;
using System.Globalization;
class Test
{
static void Main()
{
decimal d = decimal.Parse("1200.00", CultureInfo.InvariantCulture);
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture));
}
}
Je pense que votre problème est lors de l'affichage du nombre décimal, pas le contenu de celui-ci.
Si tu essayes
string value = "1200.00";
decimal d = decimal.Parse(s);
string s = d.ToString();
s
contiendra la chaîne "1200"
.
Cependant, si vous changez votre code pour cela
string value = "1200.00";
decimal d = decimal.Parse(s);
string s = d.ToString("0.00");
s
contiendra la chaîne "1200.00"
comme vous le souhaitez.
MODIFIER
On dirait que je suis braindead tôt le matin aujourd'hui. J'ai ajouté les déclarations Parse
maintenant. Cependant, même mon premier code produira "1200.00", même si je m'attendais à ce qu'il produise "1200". On dirait que j'apprends quelque chose chaque jour et, dans ce cas, évidemment, c'est quelque chose d'assez fondamental.
Donc, ne tenez pas compte de cette réponse. Nous aurons probablement besoin de plus de code pour identifier votre problème dans ce cas.
Le code ci-dessous affiche la valeur sous la forme 1200.00.
var convertDecimal = Convert.ToDecimal("1200.00");
Console.WriteLine(convertDecimal);
Vous ne savez pas ce que vous attendez?
Voici une solution que je suis venu pour moi-même. Ceci est prêt à être exécuté en tant que projet d'invite de commande. Vous devez nettoyer certaines choses sinon. J'espère que cela t'aides. Il accepte plusieurs formats d’entrée tels que: 1.234.567,89, 1.234.567.89, etc.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Linq;
namespace ConvertStringDecimal
{
class Program
{
static void Main(string[] args)
{
while(true)
{
// reads input number from keyboard
string input = Console.ReadLine();
double result = 0;
// remove empty spaces
input = input.Replace(" ", "");
// checks if the string is empty
if (string.IsNullOrEmpty(input) == false)
{
// check if input has , and . for thousands separator and decimal place
if (input.Contains(",") && input.Contains("."))
{
// find the decimal separator, might be , or .
int decimalpos = input.LastIndexOf(',') > input.LastIndexOf('.') ? input.LastIndexOf(',') : input.LastIndexOf('.');
// uses | as a temporary decimal separator
input = input.Substring(0, decimalpos) + "|" + input.Substring(decimalpos + 1);
// formats the output removing the , and . and replacing the temporary | with .
input = input.Replace(".", "").Replace(",", "").Replace("|", ".");
}
// replaces , with .
if (input.Contains(","))
{
input = input.Replace(',', '.');
}
// checks if the input number has thousands separator and no decimal places
if(input.Count(item => item == '.') > 1)
{
input = input.Replace(".", "");
}
// tries to convert input to double
if (double.TryParse(input, out result) == true)
{
result = Double.Parse(input, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
}
}
// outputs the result
Console.WriteLine(result.ToString());
Console.WriteLine("----------------");
}
}
}
}
Utilisez cet exemple
System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("en-GB",true);
decimal currency_usd = decimal.Parse(GetRateFromCbrf("usd"),culInfo);
decimal currency_eur = decimal.Parse(GetRateFromCbrf("eur"), culInfo);
le nombre décimal d = 3,00 correspond toujours à 3 . Je suppose que vous souhaitez l'afficher à l'écran ou l'imprimer sur le fichier journal sous la forme 3,00 ..__
string str = d.ToString("F2");
ou si vous utilisez la base de données pour stocker la décimale, vous pouvez définir la valeur pricision dans la base de données.
La valeur est la même, même si la représentation imprimée n’est pas celle que vous attendez:
decimal d = (decimal )1200.00;
Console.WriteLine(Decimal.Parse("1200") == d); //True
L'utilisation de la classe CultureInfo a fonctionné pour moi, j'espère vous aider.
string value = "1200.00";
CultureInfo culture = new CultureInfo("en-US");
decimal result = Convert.ToDecimal(value, culture);
Vous pouvez essayer d'appeler cette méthode dans votre programme:
static double string_double(string s)
{
double temp = 0;
double dtemp = 0;
int b = 0;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == '.')
{
i++;
while (i < s.Length)
{
dtemp = (dtemp * 10) + (int)char.GetNumericValue(s[i]);
i++;
b++;
}
temp = temp + (dtemp * Math.Pow(10, -b));
return temp;
}
else
{
temp = (temp * 10) + (int)char.GetNumericValue(s[i]);
}
}
return -1; //if somehow failed
}
Exemple:
string s = "12.3";
double d = string_double (s); //d = 12.3