13 #include <CoreFoundation/CoreFoundation.h>
18 "description" :
"How to convert a number into text.",
23 "VuoList_VuoNumberFormat",
24 "CoreFoundation.framework"
39 const char *valueAsString =
"";
40 if (json_object_get_type(js) == json_type_string)
41 valueAsString = json_object_get_string(js);
45 if (strcmp(valueAsString,
"percentage") == 0)
46 value = VuoNumberFormat_Percentage;
47 else if (strcmp(valueAsString,
"currency") == 0)
48 value = VuoNumberFormat_Currency;
58 char *valueAsString =
"decimal";
60 if (value == VuoNumberFormat_Percentage)
61 valueAsString =
"percentage";
62 else if (value == VuoNumberFormat_Currency)
63 valueAsString =
"currency";
65 return json_object_new_string(valueAsString);
77 bool showThousandSeparator)
81 CFNumberFormatterStyle style = kCFNumberFormatterDecimalStyle;
83 if (format == VuoNumberFormat_Percentage)
84 style = kCFNumberFormatterPercentStyle;
85 else if (format == VuoNumberFormat_Currency)
86 style = kCFNumberFormatterCurrencyStyle;
88 CFLocaleRef currentLocale = CFLocaleCopyCurrent();
89 CFNumberFormatterRef numberFormatter = CFNumberFormatterCreate(NULL, currentLocale, style);
92 CFNumberRef cfn = CFNumberCreate(NULL, kCFNumberIntType, &minimumIntegerDigits);
93 CFNumberFormatterSetProperty(numberFormatter, kCFNumberFormatterMinIntegerDigits, cfn);
98 CFNumberRef cfn = CFNumberCreate(NULL, kCFNumberIntType, &minimumDecimalPlaces);
99 CFNumberFormatterSetProperty(numberFormatter, kCFNumberFormatterMinFractionDigits, cfn);
104 CFNumberRef maxFractionDigits = CFNumberCreate(NULL, kCFNumberIntType, &decimalPlaces);
105 CFNumberFormatterSetProperty(numberFormatter, kCFNumberFormatterMaxFractionDigits, maxFractionDigits);
106 CFRelease(maxFractionDigits);
109 CFNumberFormatterSetProperty(numberFormatter, kCFNumberFormatterUseGroupingSeparator, showThousandSeparator ? kCFBooleanTrue : kCFBooleanFalse);
112 CFStringRef formattedNumberString = CFNumberFormatterCreateStringWithValue(NULL, numberFormatter, kCFNumberDoubleType, &value);
114 CFRelease(formattedNumberString);
117 CFRelease(numberFormatter);
118 CFRelease(currentLocale);
140 char *valueAsString =
"Decimal";
142 if (value == VuoNumberFormat_Percentage)
143 valueAsString =
"Percentage";
144 else if (value == VuoNumberFormat_Currency)
145 valueAsString =
"Currency";
147 return strdup(valueAsString);
155 return valueA == valueB;
163 return valueA < valueB;