将空字符串或包含“1.2”的字符串转换为整数的最佳方法是什么?当然,
int.TryParse
失败了,我不想使用float.TryParse
然后转换为int
。
Convert.ToDouble
(取决于文化)您可以使用
Convert.ToDouble
。但是,要小心!仅当当前区域性设置中的数字分隔符是句点字符时,以下解决方案才有效。
var a = (int)Convert.ToDouble("1.2");
Convert.ToDouble
(与文化无关)IFormatProvider
并以独立于当前区域性设置的方式转换数字:
var a = (int)Convert.ToDouble("1.2", CultureInfo.InvariantCulture.NumberFormat);
完成此任务的另一种方法是对解析的字符串使用 Split:
var a = int.Parse("1.2".Split('.')[0]);
或者:
var a = int.Parse("1.2".Split('.').First());
IsNullOrEmpty
条件。NumberFormatInfo.NumberDecimalSeparator
属性。Parse
、TryParse
或Convert
类别。阅读更多内容:我不知道解析为
float
并转换为 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;
}
为了全球化代码,您需要将
"."
替换为 System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
。
int a = (int)Math.Round(float.Parse("0.9"));
您需要先对其进行舍入,除非您希望将 0.9f 转换为 0 而不是 1。
也许你可以尝试使用字符串函数删除浮点之后的所有内容,然后转换为 int。但说真的,我认为这并不比转换为浮点数然后转换为整数更好。
我认为另一种方法是将字符串分割成小数点(.)作为分隔符,然后解析整数。当然,我还没有问你字符串是否可能包含像
"37.56 miles in 32.65 seconds"
类型值这样的值。
考虑到字符串中只有一个值(字符串或数字),我可以想到下面一行中的内容:
public int64 GetInt64(string input)
{
if (string.IsNullOrEmpty(input)) return 0;
// Split string on decimal (.)
// ... This will separate all the digits.
//
string[] words = input.Split('.');
return int.Parse(words[0]);
}
您可以使用 Visual Basic 运行时库在 C# 中完成此操作。
您需要将对程序集 Microsoft.VisualBasic.dll 的引用添加到您的解决方案中。
然后以下代码将完成您的转换:
using VB = Microsoft.VisualBasic.CompilerServices;
class Program
{
static void Main(string[] args)
{
int i = VB.Conversions.ToInteger("1.2");
}
}
我也遇到了同样的问题,最终使用了 Mark 和 Dariusz 的混合体:
if (num == "")
{
num = "0.00";
}
var num1 = (float)Convert.ToDouble(num);