【问题标题】:Input string was not in a correct format retriving value from label输入字符串的格式不正确,从标签中检索值
【发布时间】:2017-05-13 04:18:54
【问题描述】:
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

【问题讨论】:

  • 你有什么问题?
  • 您正在尝试将字符串转换为双精度。字符串呢,在尝试使其成为双倍时不容易适应?另外,请edit您的问题,以便出现错误,而不仅仅是屏幕截图。
  • 请不要链接到代码或错误的图片。相反,请将错误直接粘贴到您的帖子中。
  • 检查输出值。里面有些东西是无法转换的。
  • 该错误意味着传递给Convert.ToDouble的值无法转换。字符串output的值是多少?

标签: c# asp.net


【解决方案1】:

你需要先把你的字符串变成一个int

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

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

  labeldistance.ToFloat();

【讨论】:

  • 我刚看到你的评论,标签中不能有'km'。它不是数字,因此不能转换为浮点数/整数 @Ghanshyam Kumar
  • 感谢您提出我的问题。标签生成字符串和整数值,例如- 45.6km、34.1km ..... 我想将 45.6 km 转换为 45.6,然后使用 lblresult.txt 中的值
  • 好的,那么您缺少的部分将捕获小数点。你需要labeldistance, @"\d+(.\d+)?"。然后你输出它。
【解决方案2】:

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

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();
        }
    }
}

【讨论】:

    【解决方案3】:

    关于错误:

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

    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.1 公里,那么使用上述正则表达式您应该能够获得所需的输出。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2013-08-22
      相关资源
      最近更新 更多