Texbox到十进制文化信息

时间:2016-04-24 11:04:03

标签: c# decimal cultureinfo

我面临一个问题,我的texbox值为小数。 在比利时,十进制字符是","。它在UI上运行良好,但是一旦我将这些值传递给我的方法,它就不会读取","了。

我试过玩文化信息,但没有运气。

这里它仍然以逗号作为分隔符给出了正确的值。因此,例如,它仍然是" 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));
        }

但价格价格ExVat和priceIncVat在这里,例如现在" 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;

我是如何理解的,当我使用CultureInfo.InvariantCulture时,字符串会转换为正确的文化信息。但我认为我错了。

1 个答案:

答案 0 :(得分:2)

因为您从不在您的代码中使用您当前的文化或特定文化(可以是fr-BEnl-BE,因为您没有指定它)。

由于InvariantCulture使用,作为NumberGroupSeparator,您的代码会认为此分隔符是千位分隔符而不是小数位分隔符。

这就是为什么您的结果将是8500而不是85,00(而我假设您将85000写成了拼写错误)

如果您在代码中使用 特定文化,我认为应该没问题。

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