2010-06-10 64 views
4

我确信这是一块蛋糕,但我真的很苦恼,看起来微不足道。将字符串转换为十进制,保留确切的输入格式

我需要检查表单提交上的文本框的输入文本,并检查它是否在期望的范围内(我试过一个范围验证器,但它不工作的原因,所以我试图做这个服务器端)。

我想要做的是:

得到值输入,更换逗号和句号,将其转换成十进制(或双或同等学历),并检查,看它是否是0.10(如0.02)。和35000.00。

这是我到目前为止有:

string s = txtTransactionValue.Text.Replace(",", string.Empty).Replace(".", string.Empty); 
     decimal transactionValue = Decimal.Parse(s); 
     if (transactionValue >= 0.10M && transactionValue <= 35000.00M) // do something 

如果我通过0.02到上面,transactionValue为2。我想保留价值为0.02(即做的格式没有修改它 - 100.00是。 100.00,999.99是999.99)

任何想法?

由于提前, 布雷特

回答

0

正如其他人已经提到你扔掉点和逗号。也许你正在这样做,因为根据用户所使用的语言,你会遇到一些问题,因此在不同的文化中,点和逗号具有不同的含义。

因此,如果您知道用户的语言,你可以尝试其中之一:

decimal value = Decimal.Parse("0.02", CultureInfo.GetCultureInfo("en-US")); 
decimal value = Decimal.Parse("0,02", CultureInfo.GetCultureInfo("de-DE")); 
2

要替换 “”没有任何东西,所以你的输入从“0.02”到“002”将被解析为2.0。

为什么要替换逗号和句点(小数点)?

3

您正在替换任何出现的“。”。或“,”与String.Empty,产生一个没有分隔符的字符串。更好地使用decimal.Parse()decimal.TryParse()与适当的CultureInfo和NumberStyles。

+0

谢谢!我正在替换字符串,因为提交后我需要将199.99作为19999传入Web服务。 坦克再次! – Brett 2010-06-11 12:48:19

0

您正在更换“点”。这意味着“0.02”将是“002”,它将解析为“2”。

只是不要更换“点”。我认为替换逗号并不是必需的。

0

你也可以做一个简单的方法来考虑的CultureInfo,你想的NumberStyles。 这里是我的建议:

public decimal ParseDecimal(string input) 
{ 
    CultureInfo cultureInfo = null; 
    NumberStyles style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands; 
    decimal value = 0; 
    string[] userLanguages = HttpContext.Current.Request.UserLanguages; 
    if (userLanguages.Length > 0) 
    { 
     cultureInfo = new CultureInfo(userLanguages[0]); 
     Decimal.TryParse(input, style, cultureInfo, out value); 
    } 

    return value; 
} 
0

我会用Decimal.Parse("0.02", CultureInfo.InvariantCulture)但是,只有当您使用.作为一个旁观者的作品。 为了确保您不会收到任何错误,您应该在解析数据之前始终验证您的数据。

Decimal.Parse似乎忽略未知字符,而其他Parse函数会抛出异常。

相关问题