C # float.ToString 반올림 값

Nimrod

어쩌면 내가 뭔가를 놓치고 있지만 그 float.ToString()방법은 숫자를 반올림하여 많은 두통을 유발합니다.

다음 작은 코드를 살펴보십시오. 12345678을 입력으로 입력하면 디버거의 부동 소수점 숫자가 정확하지만 ToString메서드 의 출력 은 12345680입니다 (내가 시도한 모든 형식).

Console.WriteLine("Please enter a float number");
float theFloat = float.Parse(Console.ReadLine());
Console.WriteLine(string.Format("You have entered {0}", theFloat.ToString("F")));

그리고 출력 :

Please enter a float number
12345678
You have entered 12345680.00

도움을 주시면 감사하겠습니다!

매튜 왓슨

float에 대한 문서에서 :

  • float의 범위는 -3.4 × 10 ^ 38에서 +3.4 × 10 ^ 38입니다.
  • 부동 소수점의 정밀도는 7 자리입니다.

123456788 자리 숫자는 정밀도를 초과하므로 기본적 으로 유효 숫자 7 개로 반올림되어 12345680. ( 기본적으로 참고하십시오 .)

그러나 Microsoft 기사에서 float의 정밀도에 대해 언급 한 내용에도 불구하고 실제로는 최대 9 자리의 정밀도를 보유합니다.

에 대한 Microsoft 문서Single.ToString() 상태 :

기본적으로 최대 9 자리가 내부적으로 유지되지만 반환 값에는 7 자리의 정밀도 만 포함됩니다.

그런 다음 다음과 같이 말합니다.

더 많은 정밀도가 필요한 경우 항상 9 자리의 정밀도를 리턴하는 "G9"형식 스펙으로 형식을 지정하거나 숫자를 해당 정밀도로 표시 할 수있는 경우 7 자리를 리턴하고 숫자가 가능한 경우 9 자리를 리턴하는 "R"을 지정하십시오. 최대 정밀도로 표현됩니다.

이 정보로 무장하면 다음 코드를 작성할 수 있습니다.

Console.WriteLine(12345678f.ToString("G9"));

실제로 인쇄 12345678합니다.

내가 설명 할 수없는 것은 마이크로 소프트가 왜 float가 7 자리의 정밀도를 가지고 있다고 말한 다음 우리가 9 자리를 사용하도록하는 이유입니다.

그러나 다음 코드에서 알 수 있듯이 (마지막 숫자가 다름) 모든 8 (또는 9) 십진수 정수가 실수로 정확하게 표현되는 것은 아닙니다.

Console.WriteLine(16777217f.ToString("R")); // Prints 16777216

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Swift : 값을 반올림하지 않고 float의 문자열

분류에서Dev

Visual Studio가 올바른 C float 값을 반환하지 않음

분류에서Dev

C ++로 opencv에서 float 숫자를 반올림하는 방법

분류에서Dev

C ++는 int를 float / double로 어떻게 반올림합니까?

분류에서Dev

python3에서 반올림하지 않고 float 값을 str로 변환

분류에서Dev

C #에서 소수의 반올림 값을 얻는 방법

분류에서Dev

C #에서 텍스트 상자의 값 반올림

분류에서Dev

c로 반올림

분류에서Dev

C ++ printf 반올림?

분류에서Dev

Float 및 Float 반올림 대신 Double

분류에서Dev

float 값 목록에서 단일 요소에 액세스하면 값이 반올림됩니다.

분류에서Dev

toString의 값을 반환

분류에서Dev

C #에서 큰 10 진수 값을 작은 10 진수 값으로 반올림

분류에서Dev

Postgresql 반올림 숫자 값

분류에서Dev

반올림 및 값 변환

분류에서Dev

UIProgressView 진행 값 반올림

분류에서Dev

C ++에서 십진수 값을 어떻게 반올림 할 수 있습니까?

분류에서Dev

C #에서 소수점 2 자리를 사용한 반올림 값

분류에서Dev

haskell에서 float를 int로 반올림

분류에서Dev

Unity C #에서 ToString 값 곱하기

분류에서Dev

C ++에서 반올림

분류에서Dev

C ++에서 double 반올림

분류에서Dev

C #의 소수 반올림

분류에서Dev

C ++ 반올림 동작

분류에서Dev

C ++ 초보자 : 단일 값 반환. 문제 : 내 금액이 반올림되고 싶지 않습니다.

분류에서Dev

int를 float로 캐스팅하면 잘못된 값이 발생합니다 (일반적인 십진수 반올림 오류는 아님).

분류에서Dev

반올림에 대한 Double.ToString ( "N") 규칙

분류에서Dev

Float.toString ()이 숫자 값을 변경하는 이유는 무엇입니까?

분류에서Dev

열 대신 행별로 값 반올림

Related 관련 기사

  1. 1

    Swift : 값을 반올림하지 않고 float의 문자열

  2. 2

    Visual Studio가 올바른 C float 값을 반환하지 않음

  3. 3

    C ++로 opencv에서 float 숫자를 반올림하는 방법

  4. 4

    C ++는 int를 float / double로 어떻게 반올림합니까?

  5. 5

    python3에서 반올림하지 않고 float 값을 str로 변환

  6. 6

    C #에서 소수의 반올림 값을 얻는 방법

  7. 7

    C #에서 텍스트 상자의 값 반올림

  8. 8

    c로 반올림

  9. 9

    C ++ printf 반올림?

  10. 10

    Float 및 Float 반올림 대신 Double

  11. 11

    float 값 목록에서 단일 요소에 액세스하면 값이 반올림됩니다.

  12. 12

    toString의 값을 반환

  13. 13

    C #에서 큰 10 진수 값을 작은 10 진수 값으로 반올림

  14. 14

    Postgresql 반올림 숫자 값

  15. 15

    반올림 및 값 변환

  16. 16

    UIProgressView 진행 값 반올림

  17. 17

    C ++에서 십진수 값을 어떻게 반올림 할 수 있습니까?

  18. 18

    C #에서 소수점 2 자리를 사용한 반올림 값

  19. 19

    haskell에서 float를 int로 반올림

  20. 20

    Unity C #에서 ToString 값 곱하기

  21. 21

    C ++에서 반올림

  22. 22

    C ++에서 double 반올림

  23. 23

    C #의 소수 반올림

  24. 24

    C ++ 반올림 동작

  25. 25

    C ++ 초보자 : 단일 값 반환. 문제 : 내 금액이 반올림되고 싶지 않습니다.

  26. 26

    int를 float로 캐스팅하면 잘못된 값이 발생합니다 (일반적인 십진수 반올림 오류는 아님).

  27. 27

    반올림에 대한 Double.ToString ( "N") 규칙

  28. 28

    Float.toString ()이 숫자 값을 변경하는 이유는 무엇입니까?

  29. 29

    열 대신 행별로 값 반올림

뜨겁다태그

보관