【问题标题】:How to determine the current locale's symbol for a decimal point如何确定小数点的当前语言环境符号
【发布时间】:2019-11-03 21:56:55
【问题描述】:

如何确定小数分隔符的符号?应使用设备的当前语言环境。

【问题讨论】:

    标签: flutter dart locale number-formatting


    【解决方案1】:

    您需要使用NumberFormat 类的方法,在intl 库中可用。

    NumberFormat.decimalPattern 根据指定的语言环境格式化数字。

    例如这是获取设备区域设置和格式化数字的方法。

    import 'package:intl/intl.dart' show NumberFormat;
    import 'package:intl/number_symbols_data.dart' show numberFormatSymbols;
    import 'dart:ui' as ui;
    
    String getCurrentLocale() {
      final locale = ui.window.locale;
      final joined = "${locale.languageCode}_${locale.countryCode}";
      if (numberFormatSymbols.keys.contains(joined)) {
        return joined;
      }
      return locale.languageCode;
    }
    
    // ...
    
    String dec = NumberFormat.decimalPattern(getCurrentLocale()).format(1234.567);
    print(dec); // prints 1,234.567 for `en_US` locale
    

    但是,要回答您最初的问题 - 这是一个返回小数分隔符(如果找到)或空字符串的函数。

    String getDecimalSeparator(String locale) {
      return numberFormatSymbols[locale]?.DECIMAL_SEP ?? "";
    }
    
    // ...
    
    print(getDecimalSeparator(getCurrentLocale())); // prints `.` for `en_US` locale.
    

    如果这有帮助,请告诉我。

    【讨论】:

    • 谢谢,有帮助!我希望有更优雅的东西,因为所有这些符号(如小数点和千位分隔符)都应该存储在 intl 库的某个地方,对吧?但无论如何,它有效!
    • @G.Marc 你是对的,我们已经使用的 numberFormatSymbols 实际上包含特定语言的所有格式常量。请参阅更新的getDecimalSeparator 方法。
    • @George 很好的答案。你是否也知道答案:stackoverflow.com/questions/63613520/…
    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多