Nir*_*Nir 16 c# floating-point int parsing
获取可以为空或包含"1.2"的字符串的最佳方法是什么,并将其转换为整数?int.TryParse
当然,失败了,我不想使用float.TryParse
然后转换为int
.
Dar*_*iak 36
Convert.ToDouble
取决于文化)你可以用Convert.ToDouble
.但是,要小心!仅当当前区域性设置中的数字分隔符是句点字符时,以下解决方案才有效.
var a = (int)Convert.ToDouble("1.2");
Run Code Online (Sandbox Code Playgroud)
Convert.ToDouble
文化无关)最好IFormatProvider
从当前文化设置中以独立方式使用和转换数字:
var a = (int)Convert.ToDouble("1.2", CultureInfo.InvariantCulture.NumberFormat);
Run Code Online (Sandbox Code Playgroud)
完成此任务的另一种方法是在解析后的字符串上使用Split:
var a = int.Parse("1.2".Split('.')[0]);
Run Code Online (Sandbox Code Playgroud)
要么:
var a = int.Parse("1.2".Split('.').First());
Run Code Online (Sandbox Code Playgroud)
IsNullOrEmpty
条件.NumberFormatInfo.NumberDecimalSeparator
属性.Parse
,TryParse
或Convert
类明智.阅读更多:
我不知道解析为 afloat
并转换为int
. 我怀疑任何其他方式会更有效,但这里有一个尝试:
//allows empty strings and floating point values
int ParseInt(string s, bool alwaysRoundDown = false)
{
//converts null/empty strings to zero
if (string.IsNullOrEmpty(s)) return 0;
if (!s.Contains(".")) return int.Parse(s);
string parts = s.Split(".");
int i = int.Parse(parts[0]);
if (alwaysRoundDown || parts.Length==1) return i;
int digitAfterPoint = int.Parse(parts[1][0]);
return (digitAfterPoint < 5) ? i : i+1;
}
Run Code Online (Sandbox Code Playgroud)
为了全球化代码,您需要替换"."
为System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
.