新手问题 Rails number_to_human 怎么设置 xx 万的格式

shawnyu · 2013年07月04日 · 最后由 tesla_lee 回复于 2016年04月01日 · 4781 次阅读

number_to_human 这个方法 用的是美国的习惯 已千断位

number_to_human(11234511)
=> 11.2 百万

number_to_human(112345)
=> 112.3 千

不太符合中国人的习惯 所以想设置成已万为单位

如何设置

number_to_human(112345)
=> 11.2 万

自己写吧

2 楼 已删除

#3 楼 @shawnyu 注意文档中的Custom Unit Quantifiers,可以通过这个来解决。

碰到这个问题搜过来,没看到解决办法。。自己研究了下,把方案贴上来,方便后来人

ActiveSupport::NumberHelper::DECIMAL_UNITS[4] = :thousandx10
ActiveSupport::NumberHelper.number_to_human(112345, units: {thousandx10: '万'})

输出=> 11.2 万

如需更灵活,可搭配 i18n 文件,这样就不需要指定 units 了

  ActiveSupport::NumberHelper::DECIMAL_UNITS[4] = :wan
  ActiveSupport::NumberHelper::DECIMAL_UNITS[8] = :yi
def number_to_human(number, options = {})
  options.merge!(units: {wan: '万',yi: "亿"}, strip_insignificant_zeros: true)
  super number,options
end

目前在 Rails 4.2.4 中我使用的方法,以防有人看到

# 在Rails初始化时加入
ActiveSupport::NumberHelper::NumberToHumanConverter::DECIMAL_UNITS[4] = :wan # 万
ActiveSupport::NumberHelper::NumberToHumanConverter::DECIMAL_UNITS[8] = :yi  # 亿
ActiveSupport::NumberHelper::NumberToHumanConverter::INVERTED_DECIMAL_UNITS = ActiveSupport::NumberHelper::NumberToHumanConverter::DECIMAL_UNITS.invert

在 config/locales/zh.yml 文件中加入翻译

zh:
  number:
    human:
      decimal_units:
        units:
          unit: ""
          thousand: "千"
          wan: "万"
          million: "百万"
          yi: "亿"
          billion: "十亿"
          trillion: "万亿"
          quadrillion: "千万亿"

然后调用

number_to_human(10000, locale: :zh)

# "1 万"

number_to_human(100000000, locale: :zh)

# 1 亿
需要 登录 后方可回复, 如果你还没有账号请 注册新账号