2011-10-11 85 views
3

我想格式化欄中的一列數字 - 使用number_to_currency。我想用()s顯示負數 - 使用negative_format選項很容易做到。但是,當我這樣做時,一列數字中的小數點不對齊。我想爲正數添加一個尾部空格 - %u%n,只是我不知道該怎麼做 - 任何人都可以給我正確的格式在尾部空格嗎?rails格式正數和負數

enter image description here

+3

只是尾隨空間不會去做,這就是可能不是相同的寬度作爲右括號。這是否會進入HTML? –

+0

是的 - 我嘗試使用空格,但它被刪除...這是一個PDF格式的HTML(wicked_pdf) –

+0

wicked_pdf是否支持[CSS3文字對齊](http://www.w3.org/TR/CSS3文本/#字符排列)?如果沒有,也許這個問題將是幫助:http://stackoverflow.com/questions/1363239/aligning-decimal-points-in-html –

回答

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, ...)) %> 

注意這個函數期望一個字符串,所以它會扼殺,如果你通過它一個數字。希望這可以幫助!

0

比方說,你在你的循環變量amount

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

而在你的CSS:

.amount { 
    font-family:monospace; 
}