如何在 C# 中将数据从字符串转换为长整数
Posted
技术标签:
【中文标题】如何在 C# 中将数据从字符串转换为长整数【英文标题】:How could I convert data from string to long in c# 【发布时间】:2011-09-13 21:22:48 【问题描述】:?
我有数据
String strValue[i] ="1100.25";
现在我想要它
long l1;
【问题讨论】:
长表示整数。你给了一个非整数。你想用它做什么? 如果 strValue 是 "1100.75" 怎么办?见:***.com/questions/633335/… @magma:如果你把它转换成十进制,那么它会将数字四舍五入,即在这种情况下,如果给定的数字是 1100.75,那么它将输出 1101。 @charlie 我只是提出了这个问题,因为 MayP 似乎并没有完全意识到这里的含义。他可能想简单地去掉非整数部分而不进行任何舍入,这很好,只要这确实是他想要的。不过谢谢。 【参考方案1】:如果要获取该数字的整数部分,必须先将其转换为浮点数,然后再转换为 long。
long l1 = (long)Convert.ToDouble("1100.25");
您可以使用Math
类随意对数字进行四舍五入,或者只是截断...
【讨论】:
如果你在指定的输入上运行它,这会给你FormatException
。
@zespri,不,至少在大多数文化中不会……但在小数点分隔符不是“。”的文化中确实会失败
使用您的代码,此值 2037104000005652013 更改为 2037104000005651968。?
您需要指定一个明确的文化,将.
视为小数分隔符(CultureInfo.InvariantCulture
可以使用)。
@PraneshJanarthanan 可以在double
中安全表示的最大整数是2^53
,而你的比这更大,所以当转换为长整数时,你会得到一些时髦的结果。
【参考方案2】:
您也可以使用long.TryParse
和long.Parse
。
long l1;
l1 = long.Parse("1100.25");
//or
long.TryParse("1100.25", out l1);
【讨论】:
【参考方案3】:http://msdn.microsoft.com/en-us/library/system.convert.aspx
l1 = Convert.ToInt64(strValue)
虽然你给出的例子不是一个整数,所以我不知道你为什么要它作为一个长整数。
【讨论】:
【参考方案4】:由于小数点,您将无法直接将其转换为 long,我认为您应该将其转换为十进制,然后将其转换为 long,如下所示:
String strValue[i] = "1100.25";
long l1 = Convert.ToInt64(Convert.ToDecimal(strValue));
希望这会有所帮助!
【讨论】:
【参考方案5】:long l1 = Convert.ToInt64(strValue);
应该可以的。
【讨论】:
【参考方案6】:long 在内部表示为 System.Int64,它是一个 64 位有符号整数。 您取“1100.25”的值实际上是十进制而不是整数,因此它不能转换为长整数。
你可以使用:
String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);
将其转换为十进制值
【讨论】:
【参考方案7】:您也可以使用Int64.TryParse
方法。如果它们是任何字符串值但没有产生错误,它将返回“0”。
Int64 l1;
Int64.TryParse(strValue, out l1);
【讨论】:
【参考方案8】:您可以创建自己的转换函数:
static long ToLong(string lNumber)
if (string.IsNullOrEmpty(lNumber))
throw new Exception("Not a number!");
char[] chars = lNumber.ToCharArray();
long result = 0;
bool isNegative = lNumber[0] == '-';
if (isNegative && lNumber.Length == 1)
throw new Exception("- Is not a number!");
for (int i = (isNegative ? 1:0); i < lNumber.Length; i++)
if (!Char.IsDigit(chars[i]))
if (chars[i] == '.' && i < lNumber.Length - 1 && Char.IsDigit(chars[i+1]))
var firstDigit = chars[i + 1] - 48;
return (isNegative ? -1L:1L) * (result + ((firstDigit < 5) ? 0L : 1L));
throw new InvalidCastException($" lNumber is not a valid number!");
result = result * 10 + ((long)chars[i] - 48L);
return (isNegative ? -1L:1L) * result;
可以进一步改进:
性能方面 使验证更严格,因为它目前不关心第一个小数点后的字符是否不是数字 将舍入行为指定为转换函数的参数。它目前正在四舍五入【讨论】:
以上是关于如何在 C# 中将数据从字符串转换为长整数的主要内容,如果未能解决你的问题,请参考以下文章