매우 비슷한 질문이 있지만 그들 중 누구도 내 답변에 만족하지 않으므로 나와 함께하시기 바랍니다.이중 반올림 쿼리
2 배가 주어지면 소수점 두 자리까지 반올림 한 다음 그 차이가 정확히 0.01인지 확인해야합니다.
이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
매우 비슷한 질문이 있지만 그들 중 누구도 내 답변에 만족하지 않으므로 나와 함께하시기 바랍니다.이중 반올림 쿼리
2 배가 주어지면 소수점 두 자리까지 반올림 한 다음 그 차이가 정확히 0.01인지 확인해야합니다.
이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
다른 사람들은 부동 소수점을 비교하는 문제를 지적했습니다. 가장 좋은 방법은 각각을 100으로 곱한 다음 정수 부분을 비교하는 것입니다.
static bool ExactlyPennyDifference(double d1, double d2)
{
return Math.Abs((int)Math.Round(d1 * 100) - (int)Math.Round(d2 * 100)) == 1;
}
네, 이것이 제가 생각한 솔루션 중 하나였습니다. 100.0099999999998과 같이 double을 사용하면 int에 캐스팅하는 것이 10001이 아니라 10000을 생성하는 것처럼 항상 작동하지 않는다고 말하는 것이 사실입니까? – user1085351
그 예에서 나는 10001을 얻습니다. Math.Round에 대한 호출은 10000.99999999998을 10001.0으로 변경합니다. –
당신이 옳다면 미안합니다. 수학을 놓친 이유를 모르겠습니다. 처음으로 그것을 보았을 때 반 했었습니다. Math.Round를 double 값으로 호출하면 또 다른 double 값을 반환하기 때문에, round해야한다고 생각하는 것이 double에 의해 실제로 표현 될 수 없으므로, 여전히 부정확 할 수 있습니다. – user1085351
두 배로 정확하게 0.01을 나타낼 수 없습니다. 왜 이러는거야? – svick
나는 그것을 할 필요가있다 :) 나는 또한 그것이 가능하다고 가정하고있다. 십진법으로 변환하거나 정수로 100 배로 두 배를 곱셈하는 등의 일을 생각하고 있었습니까? – user1085351
하지만 왜 설명해야할까요? 왜 *해야합니까? 더 나은 방법이있을 수도 있지만, 모르는 사이에 당신을 도울 수 없습니다. – svick