gpt4 book ai didi

c# - 使用任何小数分隔符将字符串解析为小数

转载 作者:行者123 更新时间:2023-11-30 16:56:51 25 4
gpt4 key购买 nike

我想将文本输入的字符串解析为十进制。该值表示货币值。

目前我得到了这个解决方案:

private Decimal CastToDecimal(string value) 
{
Decimal result;
var valid = Decimal.TryParse(value, NumberStyles.Currency, null, out result);
return valid ? result : -1;
}

除了可能存在的文化差异外,目前为止效果很好。我是德国人,我希望大多数用户输入德语风格的标点符号。但有可能有人使用“.”。而不是“,”,转换将失败。

"123,45€"=> 123.45

"123.456,78€"=> 123456.78

"123.45€"=> 12345 <- 我希望这里的结果是 123.45

有没有一种方法可以自动检测所用区域性的十进制值?这样一来,无论您使用德语还是英语标点符号,您仍然会得到相同的结果?

更新:

感谢您的帮助,我创建了一个方法来完成我想要的(我认为)。

private static Decimal CastToDecimal(string value)
{
Decimal resultDe;
Decimal resultEn;
var style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
var cultureDe = CultureInfo.CreateSpecificCulture("de-DE");
var cultureEn = CultureInfo.CreateSpecificCulture("en-GB");
var deValid = Decimal.TryParse(value, style, cultureDe, out resultDe);
var enValid = Decimal.TryParse(value, style, cultureEn, out resultEn);
var minVal = Math.Min(resultDe, resultEn);
var maxVal = Math.Max(resultDe, resultEn);
if (!deValid)
return resultEn;
if (!enValid)
return resultDe;
return BitConverter.GetBytes(decimal.GetBits(minVal)[3])[2] > 2 ? maxVal : minVal;
}

这段代码...

    Console.WriteLine(CastToDecimal("123,45"));
Console.WriteLine(CastToDecimal("123.45"));
Console.WriteLine(CastToDecimal("123,450"));
Console.WriteLine(CastToDecimal("123.450"));
Console.WriteLine(CastToDecimal("123.123,45"));
Console.WriteLine(CastToDecimal("123,123.45"));

返回这个:

123,45
123,45
123450
123450
123123,45
123123,45

最佳答案

http://msdn.microsoft.com/en-us/library/3s27fasw%28v=vs.110%29.aspx 处的解决方案其中包括设置 NumberStyle 可能会有所帮助。

...
value = "1.345,978";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
culture = CultureInfo.CreateSpecificCulture("es-ES");
if (Double.TryParse(value, style, culture, out number))
Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
// Converted '1.345,978' to 1345.978.

value = "1 345,978";
if (Double.TryParse(value, style, culture, out number))
Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
Console.WriteLine("Unable to convert '{0}'.", value);
...

关于c# - 使用任何小数分隔符将字符串解析为小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27443447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com