2009-08-26 2 views
1

나는 계산 매우 높은 정밀도를 필요로하는 일부 매우 복잡한를 arithmetics, 즉하고 싶지NSDecimalNumber가 소수 자릿수를 나타내지 않는지 확인하는 방법은 무엇입니까?

10000000000 + 0.00000000001 = 10000000000.00000000001 10000000000.00000000001 * 3 = 30000000000.00000000003

나는, 수학 이런 종류의 NSDecimalNumber를 사용하고자하지만, 문제는 다음과 같습니다.이 값으로 피드를 보내는 방법은 무엇입니까?

문서는 말한다 : 내가 볼

- (id)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag 

첫 번째 문제는 가수입니다. 부호없는 long long이 필요합니다. 데이터 유형을 이해함에 따라 부동 소수점입니다. 맞습니까? 그렇다면 입력 된 값은 이미 "더티"입니다. 끝 부분에 원치 않는 소수 자릿수가있을 수 있습니다. 나는 "unsigned long long"에 대한 좋은 문서를 apple에서 찾을 수 없었지만 somone이 CGFloat로 가수를 먹인 코드 스 니펫을 기억합니다. 그래서 그것이 부동 소수점 유형이라고 가정합니다.

사실상 슈퍼 부동 소수점 데이터 유형 인 경우 어려운 질문은 다음과 같습니다. 깨끗하고 깨끗한 정수를 얻는 방법은 무엇입니까? 너무 깨끗해서, 잘못된 결과를 얻지 않고도 절반에이를 수 있습니까?

실제 NSDecimalNumber 사용법에 대한 훌륭한 자습서가 있습니까?

편집 : 여기에 문제가 없습니다. 모두에게 감사드립니다!

+1

부호없는 long long은 부동 소수점 유형이 아니며 64 비트 부호없는 정수 –

+0

입니다. 그게 내 모든 문제가 이것에 관해 사라 졌다는 것을 의미합니다. Doug 감사합니다! –

답변

1

당신이 정말로 덜 정확한 종류의 먹이에 대해 우려하고 있다면,이 -initWithString:, -initWithString:locale:, +decimalNumberWithString:, 또는 +decimalNumberWithString:locale:를 사용하는 것이 좋습니다 것입니다. 문자열 설명을 사용하면 NSDecimalNumber를 생성하기 전에 숫자 표현을 부동 소수점 또는 다른 숫자 유형으로 변환하지 않아도됩니다.

관련 문제