所以我有以下输入:Call<JsonElement> register(@Body HashMap registerApiPayload);
此函数返回3,000,000
:
30000M
将此类输入转换为public static decimal? CustomParse(string incomingValue)
{
decimal val;
if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val))
return null;
return val / 100;
}
的最佳方法是什么?
编辑
我也尝试这样做::
numbber
输出为Regex regex = new Regex(@"\d+");
答案 0 :(得分:2)
您也可以这样做
return Decimal.Parse(incomingValue, new CultureInfo("en-US"));
在美国“。”是逗号分隔符。因此它将正确解析文本。
如果将文化设置为“ de-DE” 3,则表示转换为“,”是逗号分隔符。
但是,您的正则表达式将始终为您提供3,因为它只与[0-9]+
正则表达式匹配,而不在乎您的区域性设置。如果您想让正则表达式与您的号码匹配,则必须使用类似
Regex regex = new Regex(@"\d+(,\d+)*");
这将匹配“ 123”以及“ 123,123”,但不匹配“ 123”或“ 123”。 (在女巫的情况下,它只会匹配123部分)。
答案 1 :(得分:1)
在IFormatProvider
中使用decimal.Parse
var format = new NumberFormatInfo
{
NumberGroupSeparator = ","
};
decimal res = decimal.Parse("3,000,000", format);
答案 2 :(得分:0)
尝试一下
var culture = new CultureInfo("en-US");
culture.NumberFormat.NumberDecimalSeparator = ",";
culture.NumberFormat.NumberGroupSeparator = ".";
decimal amount = 0;
if (!decimal.TryParse("3,000,000.12", NumberStyles.Any, culture, out amount))
{
... }
答案 3 :(得分:-1)
您要除以100,所以您的人数不会是300万...这是解决方案:
class Program
{
static void Main(string[] args)
{
decimal? value = CustomParse("3,000,000");
Console.WriteLine(value);
}
public static decimal? CustomParse(string incomingValue)
{
decimal val;
if (!decimal.TryParse(incomingValue.Replace(",", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val))
return null;
return val;
}
}