2016-04-24 1 views
1

Je suis confronté à un problème avec mes valeurs texbox à décimales. En Belgique, le caractère décimal est ",". Cela fonctionne bien sur l'interface utilisateur, mais une fois que je passe ces valeurs à ma méthode, je ne lis plus le ",". J'ai essayé de jouer avec des informations culturelles, mais sans chance.Texbox décimal avec information de culture

Ici, il me donne toujours les valeurs correctes avec la virgule comme séparateur. Ainsi, par exemple ici encore sa la valeur correcte de « 85,00 »

if (rdoNew.Checked) 
     { 
      productPresenter.addProduct(
            txtProductCode.Text, txtProductName.Text, txtProductDescription.Text, 
            Convert.ToDecimal(txtPriceExVat.Text, CultureInfo.InvariantCulture), Convert.ToDecimal(txtPriceIncVat.Text, CultureInfo.InvariantCulture), 
            txtProductSerial.Text, Convert.ToBoolean(checkboxIsService.Checked) 
            ); 
     } 
     else 
     { 
      productPresenter.updateProduct(Convert.ToInt32(cbProducts.SelectedValue), txtProductCode.Text, txtProductName.Text, txtProductDescription.Text, 
            Convert.ToDecimal(txtPriceExVat.Text, CultureInfo.InvariantCulture), Convert.ToDecimal(txtPriceIncVat.Text, CultureInfo.InvariantCulture), 
            txtProductSerial.Text, Convert.ToBoolean(checkboxIsService.Checked)); 
     } 

Mais le priceExVat des prix et priceIncVat ici, sont par exemple maintenant « 8500 »

public void addProduct(string productCode, string productName, string productDescription, decimal priceExVat, decimal priceIncVat, string serialNumber, bool isService) 
    { 
     tbl_products product = new tbl_products(); 
     product.ProductCode = productCode; 
     product.ProductName = productName; 
     product.ProductDescription = productDescription; 
     product.ProductPriceExVat = priceExVat; 
     product.ProductPriceInclVat = priceIncVat; 
     product.ProductSerialNumber = serialNumber; 
     product.IsService = isService; 

Comment je l'ai compris, quand j'ai utilisé CultureInfo.InvariantCulture, la chaîne est convertie en information de culture correcte. Mais je pense que je me trompe ici.

Répondre

2

Parce que vous ne utilisez votre culture actuelle ou que la culture spécifique (peut être fr-BE ou nl-BE puisque vous ne le spécifiez) dans votre code.

Depuis InvariantCulture utilisez , en tant que NumberGroupSeparator, votre code pense que ce séparateur est un séparateur de milliers pas le nombre décimal.

C'est la raison pour laquelle votre votre résultat sera 8500 pas 85,00 (et je suppose que vous avez écrit votre 85000 comme une faute de frappe)

Si vous utilisez que culture spécifique dans votre code, je pense qu'il devrait être ok .

decimal.Parse("85,00", CultureInfo.GetCultureInfo("fr-BE")); 
// 85,00 
decimal.Parse("85,00", CultureInfo.GetCultureInfo("nl-BE")); 
// 85,00 
+0

Merci! Je n'avais aucune idée que l'invariantculture utilise le "," comme un séparateur de groupes de nombres. Je l'ai lu quelque part il pourrait être utilisé comme ceci et il obtiendrait l'information de la machine. Mais apparemment pas. Mauvaise information alors. – Kevin