如何在C#中将数据从字符串转换为long


101

如何在C#中将数据从字符串转换为long?

我有资料

String strValue[i] ="1100.25";

现在我想要它

long l1;

1
长整数表示整数。您给了一个非整数。您想怎么办?
乔恩·斯基特

1
如果strValue是“ 1100.75”怎么办?参见:stackoverflow.com/questions/633335/…–
岩浆

@magma:如果你将它转换成十进制然后将圆的数量,也就是在这种情况下,如果给定数量为1100.75则输出1101
爱计算机科学

1
@charlie我只是提出这个问题,因为MayP似乎没有完全意识到这里的含义。他可能想简单地摆脱非整数部分而不进行四舍五入,这很好,只要它确实是他想要的。谢谢你
岩浆

Answers:


187

该答案不再起作用,我无法提出比此处列出的其他答案(见下文)更好的方法。请查看并对其进行投票。

Convert.ToInt64("1100.25")

来自MSDN的方法签名:

public static long ToInt64(
    string value
)

3
这就是我做的。应该标记为正确答案。
sanpaco

2
它将给出格式不正确的字符串异常。
Badhon Jain

这行不通。系统格式异常错误。字符链格式错误的问题。
里卡多·阿劳霍

没错,这似乎不再起作用,就像在2013年一样。我将在不久后发布更新。
Will Bellman

46

如果要获取该数字的整数部分,必须首先将其转换为浮点数,然后转换为long。

long l1 = (long)Convert.ToDouble("1100.25");

您可以根据需要使用Mathclass来舍入数字,也可以截断...


FormatException如果您在指定的输入上运行它,它将为您提供帮助。
Andrew Savinykh

1
@zespri,不,至少在大多数文化中不是。。。但是在十进制分隔符不是“”的文化中,它的确会失败。
Thomas Levesque

15

您也可以使用long.TryParselong.Parse

long l1;
l1 = long.Parse("1100.25");
//or
long.TryParse("1100.25", out l1);


6

由于小数点,您将无法将其直接转换为long,我想您应该将其转换为十进制,然后将其转换为long,如下所示:

String strValue[i] = "1100.25";
long l1 = Convert.ToInt64(Convert.ToDecimal(strValue));

希望这可以帮助!


3

long内部表示为System.Int64,它是一个64位有符号整数。您获取的值“ 1100.25”实际上是十进制而不是整数,因此无法将其转换为long。

您可以使用:

String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);

将其转换为十进制值



1

您也可以使用Int64.TryParse方法。如果它们是任何字符串值,但没有产生错误,它将返回“ 0”。

Int64 l1;

Int64.TryParse(strValue, out l1);

1

您可以创建自己的转换函数:

    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;
    }

可以进一步改进:

  • 表现明智
  • 在当前不关心第一个小数点后的字符是否不是数字的意义上,使验证更加严格
  • 将舍入行为指定为转换函数的参数。它目前正在四舍五入
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.