number_to_human 这个方法 用的是美国的习惯 已千断位
number_to_human(11234511) => 11.2 百万 number_to_human(112345) => 112.3 千
不太符合中国人的习惯 所以想设置成已万为单位
如何设置
number_to_human(112345) => 11.2 万
自己写吧
#2 楼 @rociiu 我看了文档的 http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_human
不知道怎么弄
#3 楼 @shawnyu 注意文档中的Custom Unit Quantifiers,可以通过这个来解决。
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 亿