summaryrefslogtreecommitdiff
path: root/platform/default/src/mbgl/i18n/format_number.cpp
diff options
context:
space:
mode:
authorm-stephen <truestyle2005@163.com>2019-11-01 10:27:03 +0800
committerGitHub <noreply@github.com>2019-11-01 10:27:03 +0800
commit9427c04bc709c39f7e083b6d1597aaf33af8c302 (patch)
tree224fa2bffbc6a81b447c76b98e4c13a51baadc29 /platform/default/src/mbgl/i18n/format_number.cpp
parentfc2c02bbc6abaef52077fe5e9e78f772e6009967 (diff)
parent5b38cfee18800cbb3c6a3186882744592662c3d6 (diff)
downloadqtlocation-mapboxgl-9427c04bc709c39f7e083b6d1597aaf33af8c302.tar.gz
Merge branch 'master' into stephen-improve-accuracy-for-cameraupstream/stephen-improve-accuracy-for-camera
Diffstat (limited to 'platform/default/src/mbgl/i18n/format_number.cpp')
-rw-r--r--platform/default/src/mbgl/i18n/format_number.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/platform/default/src/mbgl/i18n/format_number.cpp b/platform/default/src/mbgl/i18n/format_number.cpp
new file mode 100644
index 0000000000..7b6f24221d
--- /dev/null
+++ b/platform/default/src/mbgl/i18n/format_number.cpp
@@ -0,0 +1,39 @@
+#include <mbgl/i18n/number_format.hpp>
+
+#include <unicode/numberformatter.h>
+
+namespace mbgl {
+namespace platform {
+
+std::string formatNumber(double number, const std::string& localeId, const std::string& currency,
+ uint8_t minFractionDigits, uint8_t maxFractionDigits) {
+
+ UErrorCode status = U_ZERO_ERROR;
+ icu::UnicodeString ustr;
+ std::string formatted;
+
+ icu::Locale locale = icu::Locale(localeId.c_str());
+ // Print the value as currency
+ if (!currency.empty()) {
+ icu::UnicodeString ucurrency = icu::UnicodeString::fromUTF8(currency);
+ ustr = icu::number::NumberFormatter::with()
+ .unit(icu::CurrencyUnit(ucurrency.getBuffer(), status))
+ .locale(locale)
+ .formatDouble(number, status)
+ .toString();
+ } else {
+ ustr = icu::number::NumberFormatter::with()
+#if U_ICU_VERSION_MAJOR_NUM >= 62
+ .precision(icu::number::Precision::minMaxFraction(minFractionDigits, maxFractionDigits))
+#else
+ .rounding(icu::number::Rounder::minMaxFraction(minFractionDigits, maxFractionDigits))
+#endif
+ .locale(locale)
+ .formatDouble(number, status)
+ .toString();
+ }
+ return ustr.toUTF8String(formatted);
+}
+
+} // namespace platform
+} // namespace mbgl