C #에서 데이터를 문자열에서 long으로 어떻게 변환 할 수 있습니까?


102

C #에서 데이터를 문자열에서 long으로 어떻게 변환 할 수 있습니까?

데이터가 있습니다

String strValue[i] ="1100.25";

이제 나는 그것을 원한다

long l1;

1
Long은 정수를 나타냅니다. 정수가 아닌 값을 지정했습니다. 그것으로 무엇을하고 싶습니까?
Jon Skeet

1
strValue가 "1100.75"이면 어떻게됩니까? 참조 : stackoverflow.com/questions/633335/…
magma

@magma : 당신은 진수로 변환하면 지정된 수는 다음을 출력 1101 1100.75 있다면 그것은이 경우 즉, 숫자를 반올림합니다
사랑 컴퓨터 과학

1
@charlie MayP가 여기에 함축 된 의미를 완전히 인식하지 못한 것 같았 기 때문에 나는 단순히 문제를 제기 한 것입니다. 그는 반올림하지 않고 정수가 아닌 부분을 단순히 제거하고 싶을 수 있으며 실제로 원하는 것이면 괜찮습니다. 그래도 감사합니다.
마그마

답변:


187

이 답변은 더 이상 작동하지 않으며 여기에 나열된 다른 답변 (아래 참조)보다 더 나은 것을 찾을 수 없습니다. 그들을 검토하고 찬성하십시오.

Convert.ToInt64("1100.25")

MSDN의 메서드 서명 :

public static long ToInt64(
    string value
)

3
이것이 내가 한 방법입니다. 정답으로 표시되어야합니다.
sanpaco

2
올바른 형식이 아닌 문자열 예외를 제공합니다.
Badhon Jain 2016

이것은 작동하지 않습니다. 시스템 형식 예외 오류입니다. 잘못된 형식의 문자 체인에 문제가 있습니다.
Ricardo Araújo

맞습니다 .... 2013 년처럼 더 이상 작동하지 않는 것 같습니다. 곧 업데이트를 게시하겠습니다.
Will Bellman

46

해당 숫자의 정수 부분을 얻으려면 먼저 부동 숫자로 변환 한 다음 long으로 캐스트해야합니다.

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

Math클래스를 사용 하여 원하는대로 숫자를 반올림하거나 잘라낼 수 있습니다.


이것은 당신을 줄 것입니다 FormatException당신이 지정된 입력에서 실행합니다.
Andrew Savinykh 2011-06-13

1
@zespri, 아니요, 적어도 대부분의 문화권에서는 그렇지 않습니다 ... 그러나 소수 구분 기호가 "."가 아닌 문화권에서는 실제로 실패합니다.
Thomas Levesque 2011-06-13

16

long.TryParse및 을 사용할 수도 있습니다 long.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은 내부적으로 64 비트 부호있는 정수인 System.Int64로 표시됩니다. "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;
    }

더 개선 할 수 있습니다.

  • 현명한 성능
  • 현재 소수점 이하 문자가 숫자가 아닌지 상관하지 않는다는 점에서 유효성 검사를 더 엄격하게하십시오.
  • 변환 함수의 매개 변수로 반올림 동작을 지정하십시오. 현재 반올림합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.