2012-12-12 2 views
1

누군가 "40"이라고 말한 값을 입력해야합니다. 그러면이 값을 7.5로 나눠서 다른 값으로 변환합니다. 그 순간에 내가했던 : 다음NSInteger는 소수점을 허용합니까?

NSString *pCO2 = _pCO2.text; 
    float thepCO2 = [pCO2 floatValue]; 
    NSInteger newpCO2 = thepCO2/7.5; 
    NSString *finalpCO2 = [NSString stringWithFormat:@"%d", newpCO2]; 

하고 나중에 다른 관점에서 앱이있는 NSString가 finalpCO2라고 집어과 같이 숫자로 다시 변환 : 그러나

float newpCO2 = ([pCO2 floatValue]); 

, 내가 이것을 할 때 초기 pCO2에 대한 38보다 큰 값은 5로 반올림 된 것 같고 (38 = 7.5 = 5.0666), 아래가 4로 반올림됩니다. (37 = 7.5 = 4.93)

왜 이런 일이 일어 났을까요? 나는 그 숫자가 가장 가까운 소수점 자리에 오길 원한다.

감사

Layth

답변

2

NSInteger에만 저장 integers은, 그래서 그것은 소수 자릿수를 저장하지 않습니다. 부동 소수점 값을 저장해야하는 경우 NSFloat 또는 NSDecimal을 사용하십시오.

+0

그래서 어떻게 변할 것입니까? 'NSFloat newpCO2 = thepCO2/7.5;를 사용할 수 있습니까? NSString * finalpCO2 = [NSString stringWithFormat : @ "% d", newpCO2]; ' 윌 지금 작동합니까? – LaythT

+0

'% d'는 정수가 아닙니다. 대신에'% f'을 사용하십시오. https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1 – shf301

+0

@ shf301을 참조하십시오. 'NSFloat'. 하지만 CGFLoat가 있습니다. – Steven

관련 문제