[英]C# code to convert string to Double
我試圖將某些特定類型的字符串轉換為c#中的double。 通常,Convert.ToDouble()可以很好地工作,但是這一步並不總是返回健康的字符串。 這意味着輸入並不總是以“ 4.2”的格式出現。 有時它也以4.4.2的形式出現。 現在,我也不能依靠定位和截斷,因為明天可能是10.11.445?
我可以在這種情況下應用任何簡單且簡短的字符串操作功能嗎?
struct CalifornicatedNumber
{
private string value;
public CalifornicatedNumber(string value)
{
this.value = value;
}
static public implicit operator CalifornicatedNumber(string value)
{
return new CalifornicatedNumber(value);
}
static public implicit operator CalifornicatedNumber(double value)
{
return new CalifornicatedNumber(value.ToString());
}
static public implicit operator double(CalifornicatedNumber calif)
{
return double.Parse(MakeItMakeSense(calif.value));
}
static private string MakeItMakeSense(string calif)
{
if (calif.Count(x => x == '.') > 1)
calif = calif.Substring(0, calif.IndexOf('.', calif.IndexOf('.') + 1));
return calif;
}
}
然后...
CalifornicatedNumber califnum;
califnum = "10.11.145";
Console.WriteLine(califnum);
if (califnum > 10) { Console.WriteLine("huzzah");}
califnum = 13.42;
Console.WriteLine(califnum);
if (califnum > 10) { Console.WriteLine("huzzahZah"); }
...這是我編寫過的最愚蠢的代碼。
我認為這將通過解析整個字符串(如果沒有小數點)或僅在字符串的前兩個部分(如果有多個小數)來根據您的注釋進行操作。
String[] parts = stringVal.Split('.');
double doubleVal;
if (parts.length > 1)
{
doubleVal = Convert.ToDouble(parts[0] + "." + parts[1]);
}
else
{
doubleVale = Convert.ToDouble(stingVal);
}
在發表評論之后,我假設您想使用字符串4.4.2
並將其轉換為第二個字符串之后的所有內容的兩倍.
(如果找到)。
諸如此類的方法。
public static double ConvertStringToDouble(string inputString)
{
if (inputString.Count(x => x == '.') > 1)
inputString = inputString.Substring(0, inputString.IndexOf('.', inputString.IndexOf('.') + 1));
return double.Parse(inputString);
}
我將創建一種方法來創建一堆用於解析輸入文本的策略,然后遍歷這些策略直到找到結果。
首先,我將定義一個tryParseDouble
函數:
Func<string, double?> tryParseDouble = t =>
{
double value;
if (double.TryParse(t, out value))
{
return value;
}
return null;
};
然后,我將創建策略列表:
var strategies = new Func<string, double?>[]
{
t =>
{
var parts = t.Split('.');
return parts.Length > 1
? tryParseDouble(String.Join(".", parts.Take(2)))
: null;
},
tryParseDouble,
t => null,
};
最后我會得到結果:
var text = "4.4.2";
var result =
strategies
.Select(p => p(text))
.Where(v => v != null)
.FirstOrDefault();
result
變量是double?
解析的null
如果所有策略均null
則返回null
。 最終策略t => null
,這是明確的,但對於獲得最終null結果卻不是必需的。
由於需要新的策略來解析不同類型的輸入文本,因此可以根據需要將它們添加到列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.