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

问题描述 投票:0回答:8

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

我有数据

String strValue[i] ="1100.25";

现在我想要它

long l1;
c# string type-conversion long-integer
8个回答
71
投票

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

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

您可以使用

Math
类根据需要对数字进行四舍五入,或者只是截断...


64
投票

您还可以使用

long.TryParse
long.Parse

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

23
投票

https://learn.microsoft.com/en-us/dotnet/api/system.convert

l1 = Convert.ToInt64(strValue)

虽然你给出的例子不是一个整数,所以我不确定你为什么想要它作为一个长整型。


15
投票
long l1 = Convert.ToInt64(strValue);

应该可以了。


7
投票

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

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

希望这有帮助!


3
投票

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

您可以使用:

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

将其转换为十进制值


1
投票

您也可以使用

Int64.TryParse
方法。如果它们是任何字符串值,它将返回“0”,但不会生成错误。

Int64 l1;

Int64.TryParse(strValue, out l1);

-2
投票

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

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

还可以进一步改进:

  • 性能方面
  • 使验证更加严格,因为它目前不关心第一个小数点后的字符是否不是数字
  • 指定舍入行为作为转换函数的参数。它目前进行舍入
© www.soinside.com 2019 - 2024. All rights reserved.