in src/valueFormatter.ts [316:401]
export function create(options: ValueFormatterOptions): IValueFormatter {
const format: string = !!options.allowFormatBeautification
? localizationOptions.beautify(options.format)
: options.format;
const { cultureSelector } = options;
if (shouldUseNumericDisplayUnits(options)) {
let displayUnitSystem = createDisplayUnitSystem(options.displayUnitSystemType);
let singleValueFormattingMode = !!options.formatSingleValues;
displayUnitSystem.update(Math.max(Math.abs(options.value || 0), Math.abs(options.value2 || 0)));
let forcePrecision = options.precision != null;
let decimals: number;
if (forcePrecision)
decimals = -options.precision;
else if (displayUnitSystem.displayUnit && displayUnitSystem.displayUnit.value > 1)
decimals = -MaxScaledDecimalPlaces;
return {
format: (value: any): string => {
let formattedValue: string = getStringFormat(value, true /*nullsAreBlank*/);
if (!StringExtensions.isNullOrUndefinedOrWhiteSpaceString(formattedValue)) {
return formattedValue;
}
// Round to Double.DEFAULT_PRECISION
if (value
&& !displayUnitSystem.isScalingUnit()
&& Math.abs(value) < MaxValueForDisplayUnitRounding
&& !forcePrecision) {
value = Double.roundToPrecision(value);
}
if (singleValueFormattingMode) {
return displayUnitSystem.formatSingleValue(
value,
format,
decimals,
forcePrecision,
cultureSelector);
} else {
return displayUnitSystem.format(
value,
format,
decimals,
forcePrecision,
cultureSelector);
}
},
displayUnit: displayUnitSystem.displayUnit,
options: options
};
}
if (shouldUseDateUnits(options.value, options.value2, options.tickCount)) {
const unit: DateTimeUnit = DateTimeSequence.GET_INTERVAL_UNIT(
options.value /* minDate */,
options.value2 /* maxDate */,
options.tickCount);
return {
format: (value: any): string => {
if (value == null) {
return localizationOptions.nullValue;
}
let formatString: string = formattingService.dateFormatString(unit);
return formatCore({
value,
cultureSelector,
format: formatString,
});
},
options: options
};
}
return createDefaultFormatter(format, false, cultureSelector);
}