mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-29 03:18:50 +00:00
Fixes #1721. Fixed: bad negative numbers from CPNumberFormatter.
Without this fix, CPNumberFormatter didn't format negative values well. E.g. with thousands separators on it could generate, "-,999.00". This fix generally improves handling of negative numbers by CPNumberFormatter.
This commit is contained in:
1 parent
fcad7a7fe4
commit
1f0ab2ab49
2 files changed
+22
-5
No files matched your search
@@ -45,6 +45,8 @@ CPNumberFormatterRoundHalfEven = CPRoundBankers;
|
||||
CPNumberFormatterRoundHalfDown = _CPRoundHalfDown;
|
||||
CPNumberFormatterRoundHalfUp = CPRoundPlain;
|
||||
|
||||
var NumberRegex = new RegExp('(-)?(\\d*)(\\.(\\d*))?');
|
||||
|
||||
/*!
|
||||
@ingroup foundation
|
||||
@class CPNumberFormatter
|
||||
@@ -108,9 +110,11 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain;
|
||||
dcmn = [dcmn decimalNumberByRoundingAccordingToBehavior:_numberHandler];
|
||||
|
||||
var output = [dcmn descriptionWithLocale:nil],
|
||||
parts = [output componentsSeparatedByString:"."], // FIXME Locale specific.
|
||||
preFraction = parts[0],
|
||||
fraction = parts.length > 1 ? parts[1] : "",
|
||||
// FIXME this is probably locale dependent.
|
||||
parts = output.match(NumberRegex) || ["", undefined, "", undefined, undefined],
|
||||
negativePrefix = parts[1] || "",
|
||||
preFraction = parts[2] || "",
|
||||
fraction = parts[4] || "",
|
||||
preFractionLength = [preFraction length],
|
||||
commaPosition = 3;
|
||||
|
||||
@@ -141,9 +145,10 @@ CPNumberFormatterRoundHalfUp = CPRoundPlain;
|
||||
}
|
||||
|
||||
if (_numberStyle == CPNumberFormatterPercentStyle)
|
||||
{
|
||||
string += "%";
|
||||
}
|
||||
|
||||
if (negativePrefix)
|
||||
string = negativePrefix + string;
|
||||
|
||||
return string;
|
||||
default:
|
||||
|
||||
@@ -30,6 +30,14 @@
|
||||
[self assert:@"123,456" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:123456]]];
|
||||
[self assert:@"1,234,567" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1234567]]];
|
||||
|
||||
[self assert:@"-1" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:-1]]];
|
||||
[self assert:@"-12" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:-12]]];
|
||||
[self assert:@"-123" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:-123]]];
|
||||
[self assert:@"-1,234" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:-1234]]];
|
||||
[self assert:@"-12,345" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:-12345]]];
|
||||
[self assert:@"-123,456" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:-123456]]];
|
||||
[self assert:@"-1,234,567" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:-1234567]]];
|
||||
|
||||
[numberFormatter setGroupingSeparator:@" "];
|
||||
[self assert:@"1" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:1]]];
|
||||
[self assert:@"12" equals:[numberFormatter stringFromNumber:[CPNumber numberWithInt:12]]];
|
||||
@@ -78,6 +86,7 @@
|
||||
|
||||
[self assert:@"1" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1"]]];
|
||||
[self assert:@"0.4" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.4467"]]];
|
||||
[self assert:@"-0.4" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"-0.4467"]]];
|
||||
}
|
||||
|
||||
- (void)testSetMinimumFractionDigits_
|
||||
@@ -89,6 +98,7 @@
|
||||
|
||||
[self assert:@"1.000" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1"]]];
|
||||
[self assert:@"1.100" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1.1"]]];
|
||||
[self assert:@"-1.100" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"-1.1"]]];
|
||||
[self assert:@"0.4467" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.4467"]]];
|
||||
}
|
||||
|
||||
@@ -121,6 +131,7 @@
|
||||
[numberFormatter setCurrencyCode:@"USD"];
|
||||
|
||||
[self assert:@"$1.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"1"]]];
|
||||
[self assert:@"-$1.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"-1"]]];
|
||||
[self assert:@"$12.00" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12"]]];
|
||||
[self assert:@"$12.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12.1"]]];
|
||||
[self assert:@"$12.10" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"12.10"]]];
|
||||
@@ -149,6 +160,7 @@
|
||||
[numberFormatter setNumberStyle:CPNumberFormatterPercentStyle];
|
||||
|
||||
[self assert:@"1%" equals:[numberFormatter stringFromNumber:[CPDecimalNumber decimalNumberWithString:@"0.01"]]];
|
||||
[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"]]];
|
||||
|
||||
|
||||
Reference in new issue
Block a user