편집 단축 중지 : 여기, 고정 내가 furture 참조 할 수 있도록 한 방법입니다NSNumberFormatter 숫자를
NSNumber *inputNumber = [[NSNumber alloc ]initWithDouble:convertValue];
NSNumber *resultNumber = [[NSNumber alloc]initWithDouble:result];
NSNumberFormatter *formatterResult = [[NSNumberFormatter alloc] init];
formatterResult.numberStyle = NSNumberFormatterDecimalStyle;
NSNumberFormatter *formatterInput = [[NSNumberFormatter alloc] init];
formatterInput.numberStyle = NSNumberFormatterDecimalStyle;
[formatterResult setNumberStyle:NSNumberFormatterDecimalStyle];
[formatterResult setMaximumFractionDigits:6];
[formatterInput setNumberStyle:NSNumberFormatterDecimalStyle];
[formatterInput setMaximumFractionDigits:6];
//These four lines are the one fixing the issue.
NSString *formattedResultString = [formatterResult stringFromNumber:(NSNumber*)resultNumber];
NSString *formattedInputString = [formatterInput stringFromNumber:(NSNumber*)inputNumber];
NSString *formelString = [[NSString alloc]initWithFormat:
@" %@ %@ =", formattedInputString, convertFromName];
formelLabel.text = formelString;
NSString *resultString = [[NSString alloc]initWithFormat:
@" %@ %@",formattedResultString, convertToName];
resultLabel.text = resultString;
---------- 원래의 질문 ------- -----
NSNumberFormatter 단축 번호 문제가 너무 많으며 주 번호가 8 자리 이상인 경우 소수점이 표시되지 않습니다.
아래 그림 과제 :
< - 작동하지만, 세 소수로 단축. 다음 문제를
을 (그리고 수학적으로 올바른 수행되는, 반올림) 그리고 :
하면, 아래 이미지를 바로 볼 수있는 것처럼 (가장 오른쪽의 그림은 정확) 소수를 완전히 무시합니다. 이 코드가 제대로 작동하려면 어떤 코드를 추가/변경해야합니까?
[super viewDidLoad];
_convertFrom = @[@"MTPA", @"MMcf/day",
@"Mill.Sm3/day", @"MMBTU/day", @"Boe/day",@"ton LNG/day", @"GJ/day"];
_convertTo = @[@"MTPA", @"MMcf/day",
@"Mill.Sm3/day", @"MMBTU/day", @"Boe/day", @"ton LNG/day", @"GJ/day"];
_convertRates = @[ @1.0f, @133.3333333f, @3.775579545f,
@137333.3333f, @23747.68013, @1716.17252, @147247.6022];
//some place down in the code:
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
[self updateConversionLabel];
}
- (void)updateConversionLabel
{
float convertFrom = [[_convertRates objectAtIndex:[picker selectedRowInComponent:0]] floatValue];
float convertTo = [[_convertRates objectAtIndex:[picker selectedRowInComponent:1]] floatValue];
NSNumberFormatter *fmt = [NSNumberFormatter new];
float input = [fmt numberFromString:inputText.text].floatValue;
float to = convertTo;
float from = convertFrom;
float convertValue = input;
float relative = to/from;
float result = relative * convertValue;
NSString *convertFromName = [_convertFrom objectAtIndex:[picker selectedRowInComponent:0]];
NSString *convertToName = [_convertFrom objectAtIndex:[picker selectedRowInComponent:1]];
NSNumber *inputNumber = [[NSNumber alloc ]initWithFloat:convertValue];
NSNumber *resultNumber = [[NSNumber alloc]initWithFloat:result];
NSNumberFormatter *formatterResult = [[NSNumberFormatter alloc] init];
formatterResult.numberStyle = NSNumberFormatterDecimalStyle;
NSNumberFormatter *formatterInput = [[NSNumberFormatter alloc] init];
formatterInput.numberStyle = NSNumberFormatterDecimalStyle;
NSString *formattedResultString = [formatterResult stringFromNumber:(NSNumber*)resultNumber];
NSString *formattedInputString = [formatterInput stringFromNumber:(NSNumber*)inputNumber];
NSString *formelString = [[NSString alloc]initWithFormat:
@" %@ %@ =", formattedInputString, convertFromName];
formelLabel.text = formelString;
NSString *resultString = [[NSString alloc]initWithFormat:
@" %@ %@",formattedResultString, convertToName];
resultLabel.text = resultString;
}
내가 문제/수정이 코드에 가정 것 :
다음은 관련 코드입니다.
감사합니다, 플로트 문제를 해결 더블 대신. 나 자신을 생각하지 않는 것에 대해 어리 석을 느낀다. 내가 NSDecimalNumber 물건을 알아낼 때 대답을 받아 들일 것입니다. –
당신이 원한다면 답에 코드를 추가하는 것을 도와 줄 수 있습니다. 그래서이 작업을 더 빨리 끝낼 수 있습니다 :) –
@OscarApeland - 추가 정밀도가 필요하지 않는 한'double'으로 고정하십시오. 'NSDecimalNumber'는 객체 기반이므로 'NSNumber'와 마찬가지로 메모리를 할당/할당 해제합니다. 반면에'double '은 값 기반이므로 메모리 할당이 필요 없습니다. NSDecimalNumber'의 값 기반 형식 인'NSDecimal'이 있습니다. 자세한 내용은를 참조하십시오. –
CRD