문제

누군가 이유를 설명해 주시겠습니까? int (0.4 * 10.0) ~이다 4 아직 int ((2.4 - 2.0) * 10.0) ~이다 3?

또한 얻는 방법을 설명하십시오 4. 즉, 정말해야합니다 int (System.Math.Round((2.4 - 2.0) * 10.0))?

너무 간단해야 할 일에 너무 못 생겼습니다.

도움이 되었습니까?

해결책

2.4-2.0의 이중 표현은 0.399999999999입니다. 숫자를 int로 변환 할 때 십진수는 잘려서 3.999999999는 3으로 잘립니다.

다른 팁

그런 다음 4.를 얻는 방법을 설명 해주세요. 즉, 정말해야합니다.

int (system.math.round ((2.4-2.0) * 10.0))

너무 간단해야 할 일에 너무 못 생겼습니다.

물론, 그냥 정의하십시오

let round x = int System.Math.Round(x)

실제로 .NET에는 a가 있습니다 decimal 숫자를 십자 분수로 표현할 수있는 경우이 문제에 도움이되는 데이터 유형.

2.4m - 2.0m == 0.4m
2.4 - 2.0   != 0.4

은밀한 a float 숫자 int 사용:

let i = Convert.ToInt32(f)

부동 소수점 숫자는 무한한 정밀도가 아닙니다. 일부 숫자는 완벽하게 표현 될 수 있습니다 (예 : 1, 1/2 = 0.5, 1/4 = 0.25 등의 힘이 포함됩니다). 두 권력). 종종 무한 시리즈의 끝을 자르면 인코딩 된 버전의 숫자가 실제 값보다 약간 작습니다.

이것을 (int) 연산자가 라운드가 아닌 자리를 자르고, 작업이있는 경우를 통과 할 수 있다는 사실과 결합합니다. ~해야 한다 3.999999999991에서 4.0을 산출하면 3이됩니다.

플로트/복식을 Ints로 변환하려고 할 때마다, 당신은 어떤 운영자를 사용하려는 어떤 연산자에 대해 신중하게 생각하고 싶어합니다-반올림 (반올림), 반올림 또는 반올림에서 가장 반올림합니다.

이것은 부동 소수점 표현의 문제이므로 F#뿐만 아니라 C# 및 (IIRC) Java 및 기타 언어에 해당됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top