输入字符串格式不正确,从标签中检索值

时间:2017-05-12 19:44:13

标签: c# asp.net

string labeldistance = lbldistance.Text;
string output = Regex.Match(labeldistance, @"\d+").Value;
double labeldistance1 = Convert.ToDouble(output);
double carMilege = 10;
double cost = 70;
lblResult.Text = ((labeldistance1/carMilege)*cost).ToString();

retrieving value from label and label contains both string and integer

3 个答案:

答案 0 :(得分:0)

您需要先将字符串设为int

   string labeldistance = lbldistance.Text;
   labeldistance.ToInt32();
   string output = Regex.Match(labeldistance, @"\d+").Value;
   double labeldistance1 = Convert.ToDouble(output);

编辑:如果你需要它来浮动只是做同样的事情,只是

  labeldistance.ToFloat();

答案 1 :(得分:0)

关于错误:

  

输入字符串的格式不正确,从标签

中删除值

Convert.ToDouble()的输入字符串中没有数字时会出现此错误,因此在您的程序中,output肯定没有任何数字。

Convert.ToDouble(""); // throws System.FormatException: Input string was 
                      // not in a correct format.

Convert.ToDouble("48.1") // works fine

所以你应该调试,设置断点并检查lbldistance.Text是否真的包含48.1km',然后output是否包含48。

使用正则表达式提取数字:

根据您的示例,您似乎想要使用double变量提取48.1。为此,您可能想要像这样调整正则表达式:

\d+(.\d+)?

这也将捕获包含小数的数字。这是使用此正则表达式和部分代码的工作演示:

string labeldistance = "48.1km";
string output = Regex.Match(labeldistance, @"\d+(.\d+)?").Value;
double labeldistance1 = Convert.ToDouble(output);
Console.WriteLine(labeldistance1);
// Outputs 48.1

Dotnet Fiddle

因此,如果您确保lbldistance.Text确实包含48.1km然后使用上述正则表达式,您应该能够获得所需的输出。

希望这有帮助!

答案 2 :(得分:0)

始终清理您从用户处获得的输入:

using System;
using System.Text.RegularExpressions;

namespace StackOverflow_Example
{
    class Program
    {
        static void Main(string[] args)
        {
            const string input = "Label: +1,234.56";
            string sanitized = Regex.Match(input, @"[0-9\.\+\-\,]+").Value; // filters out everything except digits (0-9), decimal points (.), signs (+ or -), and commas (,)
            double distance = Convert.ToDouble(sanitized);

            Console.WriteLine($"Input => \t\t{input}");             // Label: +1,234.56
            Console.WriteLine($"Standardized => \t{sanitized}");    // +1,234.56
            Console.WriteLine($"Distance => \t\t{distance}");       // 1234.56
            Console.ReadKey();
        }
    }
}