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
答案 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
因此,如果您确保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();
}
}
}