【问题标题】:rails format positive and negative numbersrails 格式化正数和负数
【发布时间】:2011-10-21 12:19:20
【问题描述】:

我正在尝试在 rails 中格式化一列数字 - 使用 number_to_currency。我想用 ()s 显示负数 - 使用 negative_format 选项很容易做到这一点。但是,当我这样做时,一列数字中的小数点不会对齐。我想在正数格式中添加一个尾随空格 - %u%n,只是我不知道该怎么做 - 谁能给我正确的方法来格式化尾随空格?

【问题讨论】:

  • 只是一个尾随空格不会这样做,这可能与右括号的宽度不同。这是要进入 HTML 吗?
  • 是的 - 我尝试使用空格,但它被删除了...这是 pdf 的 html 格式 (wicked_pdf)
  • wicked_pdf 是否支持CSS3 text-align on a character?如果没有,也许这个问题会有所帮助:stackoverflow.com/questions/1363239/…

标签: ruby ruby-on-rails-3


【解决方案1】:

有几种方法可以用一点空间填充正数:

  1. 使用fixed width font 和不间断空格 
  2. 对正数的封闭元素应用一个类(或包裹在一个跨度中),然后使用内部填充在右侧添加空间。

第一种方法将演示与内容混合在一起,但具有使用任何字体大小(或用户调整大小的字体)的优势。使用第二种解决方案,您的 HTML 更干净,并且在表现良好的浏览器中一切正常,但您的里程会因不太现代的浏览器而异。

这是第一个选项的快速实现:

def pad_positives(number_string)
  unless number_string[0,1] == '('
    number_string += '%nbsp;'
  end
  number_string
end

您可以将其放入适当的帮助文件中,然后在您的视图中执行类似的操作:

<%= pad_positives(number_to_currency(number, ...)) %>

注意这个函数需要一个字符串,所以如果你给它一个数字它会阻塞。希望这会有所帮助!

【讨论】:

    【解决方案2】:

    假设您的循环中有变量amount

    <td class="amount">
      <%= (amount >= 0) ? "#{number_to_currency(amount)}&nbsp;" : "(#{number_to_currency(amount)})" %>
    </td>
    

    在你的 CSS 中:

    .amount {
      font-family:monospace;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      相关资源
      最近更新 更多