문제

문제는 테이블에서 뷰로 둘 이상의 복식을 추가하면 올바른 결과를 제공하는 대신 약 10 자리 이상을 추가합니다. 예를 들어 0.5+1.5 = 1.9999999998 또는 5.5+8.5 = 14.0000000001입니다. 어떤 아이디어? (나는 이것이 일종의 N00B 질문이라는 것을 알고 있으며 9 학년 시험에서 그런 것들을 다루어야한다는 것을 기억하지만, 그때 어떻게했는지 기억할 수 없습니다 : P)

도움이 되었습니까?

해결책

http://dev.mysql.com/doc/refman/55.0/en/string-functions.html#function_format

그게 당신의 이후에 숫자를 포맷 할 수 있습니까?

다른 팁

플로트 나 복식으로 1과 1을 추가하면 2를 제외한 것은 아닙니다.

나는 0.5 + 1.5가 2를 제외한 것에 나온다고 믿기가 어렵다는 것을 알게된다.

이 모든 숫자는 바이너리 플로팅 포인트에서 올바르게 표시 될 수 있습니다.

나는 당신의 모범을 믿지 않는다고 말하는 것이 싫지만 나는 그렇지 않습니다. :-)

그러나 나는 당신이 1.1과 같은 숫자에 문제가있을 수 있다고 생각합니다.

왜요? 1/10은 이진에서 반복되는 소수점으로 판명되기 때문입니다.

소수점과 이진 표현 사이에서 부동 소수점 번호를 변환하려고 할 때 문제가 발생합니다. 일부 숫자는 여행을 잘 만들어 지지만 다른 숫자는 근사치입니다.


그러나 당신의 예제가 실제로 그렇게 작동한다면, 나는 무슨 일이 일어나고 있는지 전혀 모르고 알고 싶습니다.

부동 소수점 번호는 항상 근사치입니다. :-) 정밀도가 중요한 경우 정수를 사용하는 방법을 알아냅니다.

내 경험에 따르면, 플로트/더블 대신 Decimal Datatype을 사용했을 때 항상 정확한 결과를 얻었습니다.

이 기사 이 문제는 꽤 잘 설명됩니다.

간단히 말해서, 매우 크거나 매우 작은 부동 소수점 수는 계산 중에 정밀도가 손실 될 수 있습니다.

플로팅 포인트 유형으로 작업 할 때 정수를 기대하지 마십시오.

설명이나 솔루션을 찾고 있는지 확실하지 않지만 이미 좋은 설명에 대한 포인터를 얻었 기 때문에 ....

정수처럼 행동하려면 숫자가 필요한 경우 정수를 사용하십시오. 유한 한도의 정밀도 (예 : 소수점, 돈을 나타내는 필드의 경우)가 필요하다면 어쨌든 정수로 보관하십시오. 그러나 10의 요인을 곱하십시오. 데이터베이스를 꺼낼 때 데이터베이스를 나누고 동일하게 나눕니다.

따라서 3.99 달러의 위젯을 대표하는 경우 399를 위젯 코스트 필드에 넣습니다.

그것이 당신의 상황에 적용되는지 여부. 그러나 일반적인 경험 법칙은 부동 소수점 수가 항상 근사치라는 것입니다. :-) 정밀도가 중요한 경우 정수를 사용하는 방법을 알아냅니다.

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