diff --git a/Foundation/CPNumberFormatter.j b/Foundation/CPNumberFormatter.j index 1fafb8969..e83f1647c 100644 --- a/Foundation/CPNumberFormatter.j +++ b/Foundation/CPNumberFormatter.j @@ -90,6 +90,11 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; - (CPString)stringFromNumber:(CPNumber)number { + if (_numberStyle == CPNumberFormatterPercentStyle) + { + number *= 100.0; + } + var dcmn = [number isKindOfClass:CPDecimalNumber] ? number : [[CPDecimalNumber alloc] _initWithJSNumber:number]; // TODO Add locale support. @@ -97,6 +102,7 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; { case CPNumberFormatterCurrencyStyle: case CPNumberFormatterDecimalStyle: + case CPNumberFormatterPercentStyle: UPDATE_NUMBER_HANDLER_IF_NECESSARY(); dcmn = [dcmn decimalNumberByRoundingAccordingToBehavior:_numberHandler]; @@ -133,6 +139,11 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain; else string = _currencyCode + string; } + + if (_numberStyle == CPNumberFormatterPercentStyle) + { + string += "%"; + } return string; default: diff --git a/Tests/Foundation/CPNumberFormatterTest.j b/Tests/Foundation/CPNumberFormatterTest.j index 13775a26e..3b6a6cc3c 100644 --- a/Tests/Foundation/CPNumberFormatterTest.j +++ b/Tests/Foundation/CPNumberFormatterTest.j @@ -143,6 +143,23 @@ [self assert:@"SEK0.02" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.015"]]]; } +- (void)testPercentStyle +{ + var numberFormatter = [CPNumberFormatter new]; + [numberFormatter setNumberStyle:CPNumberFormatterPercentStyle]; + + [self assert:@"1%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.01"]]]; + [self assert:@"100%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.0"]]]; + [self assert:@"150%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.5"]]]; + + [numberFormatter setMinimumFractionDigits:1]; + [numberFormatter setMaximumFractionDigits:1]; + + [self assert:@"1.0%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.01"]]]; + [self assert:@"100.2%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.002"]]]; + [self assert:@"150.7%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.507"]]]; +} + - (void)testSetGeneratesDecimalNumbers_ { var numberFormatter = [CPNumberFormatter new];