从字符串开头提取十进制

本文关键字:十进制 提取 开头 字符串 | 更新日期: 2023-09-27 18:37:19

>我有一个像5.5kg7.90gram这样的字符串,我想将5.57.90作为十进制值。我如何在 C# 中获得这样的结果,还有一件事我的字符串将始终以十进制开头。

这是我的代码,每当遇到除小数以外的任何内容时都会抛出错误。

string weight = attributeValue;
if (!string.IsNullOrEmpty(weight))
{
    product.Weight = Convert.ToDecimal(attributeValue);
}
else
{
    product.Weight = 0.00m;
}

从字符串开头提取十进制

我会创建一个与前导数字部分匹配的正则表达式。这将部分取决于您是否始终有一个小数点,是否要允许逗号分隔数千位,是否始终使用.作为小数点等。它可能看起来像这样:

^-?'d+(?:'.'d+)?

然后将该正则表达式与您的文本匹配,获取匹配的值(如果成功),并在该值上使用decimal.Parsedouble.Parse

Regex regex = new Regex(@"^-?'d+(?:'.'d+)?");
Match match = regex.Match(text);
if (match.Success)
{
    weight = decimal.Parse(match.Value, CultureInfo.InvariantCulture);
}

请注意,对于质量等"自然"值,使用 double 可能比使用decimal更好。后者更适合货币等"人为"值,这些值自然最好用十进制表示并具有精确的值。这取决于你在做什么。

这是一种完全不同的方法

    string oldstr = "1.7meter";
        Char[] strarr = oldstr.ToCharArray().Where(c => Char.IsDigit(c) || Char.IsPunctuation(c)).ToArray();
        decimal number = Convert.ToDecimal( new string(strarr)); 

对于您的输入格式,您可以通过此代码获取十进制

var weight =Decimal.Parse( Regex.Match(input_string, "[0-9]*''.*[0-9]*").Value);

如果您的输入字符串采用不同的格式,则必须更改 正则表达式模式