如何在 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 类随意对数字进行四舍五入,或者只是截断...

Math.Round Math.Ceil

【讨论】:

如果你在指定的输入上运行它,这会给你FormatException @zespri,不,至少在大多数文化中不会……但在小数点分隔符不是“。”的文化中确实会失败 使用您的代码,此值 2037104000005652013 更改为 2037104000005651968。? 您需要指定一个明确的文化,将. 视为小数分隔符(CultureInfo.InvariantCulture 可以使用)。 @PraneshJanarthanan 可以在double 中安全表示的最大整数是2^53,而你的比这更大,所以当转换为长整数时,你会得到一些时髦的结果。 【参考方案2】:

您也可以使用long.TryParselong.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# 中将数据从字符串转换为长整数的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中将字符串转换为整数

C:如何将字符串转换为长整数格式的整数

C语言中字符串和整数小数相互转换的函数都有啥?

如何在视图中将 ntext 字段显示为长字符串?

如何在C#中将字节转换为字符串[重复]

如何在 C# 中将 E+ 数字从字符串转换为十进制? [复制]