2011-05-11 187 views
6

我需要将字符串转换为C#中的小数,但此字符串具有不同的格式。将字符串转换为格式为

例如:

“50085”

“500,85”

“500.85”

这应该是十进制转换为500,85。是否有一个简化的形式来使用格式来做这个转换?

+0

十进制不以 “500,85” 的格式存储。你在问一对小数吗? – 2011-05-11 11:19:35

+2

@myermian:嗯,它可以,这取决于你的文化/区域设置。不是每个人都以相同的方式表示小数值。在这个例子中,'500,85'可能相当于'500.85'。 – 2011-05-11 11:36:53

+0

在你的字符串中可能是'50.865,85'吗? – V4Vendetta 2011-05-11 11:54:33

回答

14

虽然decimal.Parse( )是th你正在寻找的方法,你将不得不提供更多的信息。它不会自动选择你给出的3种格式,你必须告诉它你期待的格式(以IFormatProvider的形式)。请注意,即使使用IFormatProvider,我也不认为“50085”会被正确拉入。

我看到的唯一一致的事情是,从您的示例中可以看出,您总是希望精确度有两位小数。如果是这样的话,你可以去掉所有的句号和逗号,然后乘以100

也许是这样划分:

public decimal? CustomParse(string incomingValue) 
{ 
    decimal val; 
    if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val)) 
     return null; 
    return val/100; 
} 
+0

我没有找到任何格式来解决我的问题。 我使用这个实现并添加小数位。 谢谢 – 2011-05-12 20:11:03

6

这将工作,这取决于你的文化设置:

string s = "500.85"; 
decimal d = decimal.Parse(s); 

如果你的文化不被默认允许,而不是.作为一个小数点,你可能需要:

s = s.Replace(',','.'); 

但是需要检查多个. ......这似乎归结为更多的投入消毒问题。如果您能够验证和消毒输入以符合一系列规则,则转换为十进制将更容易。

+0

+1用于提及输入消毒... -1用于不处理“50085”。平衡到没有投票:) – 2011-05-11 11:40:25

+0

我担心也可能有一个输入像'50.865,85' – V4Vendetta 2011-05-11 11:53:36

+0

@Chris,50085会导致50085后decimal.Parse ...我会接受没有投票,虽然我不接受我认为这完全回答了OP的问题。 :) – Jaymz 2011-05-11 12:03:00

1

有许多方法:

  1. System.Convert.ToDecimal("232.23")
  2. Double.Parse("232.23")
  3. double test; Double.TryParse("232.23", out test)

确保你试图赶上...

13

有些文化用一个逗号来表示浮点。你可以用一个aspx页面上下面的代码测试:

var x = decimal.Parse("500,85"); 
Response.Write(x + (decimal)0.15); 

这给出了答案501当线程文化已被设置为使用逗号作为浮点文化。您可以强制使用像这样:

var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," }); 
3

试试下面这段代码:

string numValue = "500,85"; 
System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("fr-FR"); 
decimal decValue; 
bool decValid = decimal.TryParse(numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); 
if (decValid) 
{ 
    lblDecNum.Text = Convert.ToString(decValue, culInfo.NumberFormat); 
} 

因为我给的500,85值我会认为文化是法国人,因此小数点分隔符“,”。然后decimal.TryParse(numValue,System.Globalization.NumberStyles.Number,culInfo.NumberFormat,out decValue); 将以decValue的形式返回值为500.85。同样,如果用户是英语美国人,然后更改culInfo构造函数。

1

这是一个新功能,称为数字分组符号

步骤:

  1. 打开区域和语言选项控制面板
  2. 点击附加设置
  3. 在数字选项卡
  4. 设置数字分组符号的自定义设置。 更改逗号;替换为(任何字符为A到Z或{/,})。 数字分组符号= e;

实施例:

string checkFormate = "123e123"; 
decimal outPut = 0.0M; 
decimal.TryParse(checkFormate, out outPut); 
Ans: outPut=123123;