将带逗号的字符串转换为双精度
Convert a string with commas to double
我有这样一个字符串:99 365 25,633 gghddhdf 35
我需要数组中的所有数字。我的问题是如何处理 25,633
因为 ','。我怎么也能得到这个号码?我的代码是:
public string campDiff(string lineStr1, string lineStr2)
{
int size;
string sum = null;
double num1;
double num2;
double number;
string[] lineArr1 = lineStr1.Split(' '); ;
string[] lineArr2 = lineStr2.Split(' ');
if (lineArr1.Length > lineArr2.Length)
{
size = lineArr1.Length;
}
else
{
size = lineArr2.Length;
}
for (int i = 0; i < size; i++)
{
if (Double.TryParse(lineArr1[i], out num1))
{
if (Double.TryParse(lineArr2[i], out num2))
{
number = num2 - num1;
if (number > 0)
{
sum = Convert.ToString(number);
return sum;
}
}
}
}
return sum;
}
但是它跳过了带逗号的数字。
在做sub之前简单的检查当前lineArrX是否为IsLetter
public class IsLetterSample {
public static void Main() {
char ch = '8';
Console.WriteLine(Char.IsLetter(ch)); // False
Console.WriteLine(Char.IsLetter("sample string", 7)); // True
}
我假设你的字符串中只有一个包含,
的字符串,那么你可以用白色space拆分你的字符串,得到项目包含该字符,然后使用具有 ,
作为 NumberDecimalSeparator
的文化将其解析为 double
,例如 (tr-TR
).
var str = "99 365 25,633 gghddhdf 35";
var element = str.Split(' ').Where(s => s.Contains(',')).ToArray()[0];
double d = double.Parse(element, CultureInfo.GetCultureInfo("tr-TR"));
我使用 tr-TR
因为这是我当前的文化。您可以 Clone
您的 CurrentCulture
并将其 NumberDecimalSeparator
属性 设置为 ,
如果不是。
您可以先对字符串进行正则表达式
Regex.Replace(input, "[^0-9]+", string.Empty);
有很多可能的解决方案。虽然,我认为最好的方法是将 CultureInfo
设置为 Invariant,然后用点替换所有逗号。例如:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
string number = "3,2";
double d = double.Parse(number.Replace(",", "."));
Console.WriteLine(d);
在你的代码中会这样:
double[] numbers1 =
lineStr1.Replace(",", ".")
.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
.Select(s =>
{
double value;
bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
return new { value, success };
})
.Where(p => p.success)
.Select(p => p.value)
.ToArray();
double[] numbers2 =
lineStr2.Replace(",", ".")
.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
.Select(s =>
{
double value;
bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
return new { value, success };
})
.Where(p => p.success)
.Select(p => p.value)
.ToArray();
现在你有两个数组 numbers1 和 numbers2 从两个字符串 [=21] 中解析出所有可能的数字=]lineStr1 和 lineStr2。你决定如何处理它们,因为我无法完全理解你的方法的目的。
(感谢评论中的所有人让我编辑我的答案。)
我有这样一个字符串:99 365 25,633 gghddhdf 35
我需要数组中的所有数字。我的问题是如何处理 25,633
因为 ','。我怎么也能得到这个号码?我的代码是:
public string campDiff(string lineStr1, string lineStr2)
{
int size;
string sum = null;
double num1;
double num2;
double number;
string[] lineArr1 = lineStr1.Split(' '); ;
string[] lineArr2 = lineStr2.Split(' ');
if (lineArr1.Length > lineArr2.Length)
{
size = lineArr1.Length;
}
else
{
size = lineArr2.Length;
}
for (int i = 0; i < size; i++)
{
if (Double.TryParse(lineArr1[i], out num1))
{
if (Double.TryParse(lineArr2[i], out num2))
{
number = num2 - num1;
if (number > 0)
{
sum = Convert.ToString(number);
return sum;
}
}
}
}
return sum;
}
但是它跳过了带逗号的数字。
在做sub之前简单的检查当前lineArrX是否为IsLetter
public class IsLetterSample {
public static void Main() {
char ch = '8';
Console.WriteLine(Char.IsLetter(ch)); // False
Console.WriteLine(Char.IsLetter("sample string", 7)); // True
}
我假设你的字符串中只有一个包含,
的字符串,那么你可以用白色space拆分你的字符串,得到项目包含该字符,然后使用具有 ,
作为 NumberDecimalSeparator
的文化将其解析为 double
,例如 (tr-TR
).
var str = "99 365 25,633 gghddhdf 35";
var element = str.Split(' ').Where(s => s.Contains(',')).ToArray()[0];
double d = double.Parse(element, CultureInfo.GetCultureInfo("tr-TR"));
我使用 tr-TR
因为这是我当前的文化。您可以 Clone
您的 CurrentCulture
并将其 NumberDecimalSeparator
属性 设置为 ,
如果不是。
您可以先对字符串进行正则表达式
Regex.Replace(input, "[^0-9]+", string.Empty);
有很多可能的解决方案。虽然,我认为最好的方法是将 CultureInfo
设置为 Invariant,然后用点替换所有逗号。例如:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
string number = "3,2";
double d = double.Parse(number.Replace(",", "."));
Console.WriteLine(d);
在你的代码中会这样:
double[] numbers1 =
lineStr1.Replace(",", ".")
.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
.Select(s =>
{
double value;
bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
return new { value, success };
})
.Where(p => p.success)
.Select(p => p.value)
.ToArray();
double[] numbers2 =
lineStr2.Replace(",", ".")
.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
.Select(s =>
{
double value;
bool success = double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
return new { value, success };
})
.Where(p => p.success)
.Select(p => p.value)
.ToArray();
现在你有两个数组 numbers1 和 numbers2 从两个字符串 [=21] 中解析出所有可能的数字=]lineStr1 和 lineStr2。你决定如何处理它们,因为我无法完全理解你的方法的目的。
(感谢评论中的所有人让我编辑我的答案。)