2011-04-15 70 views
1

即時通訊使用Jruby(多數民衆贊成紅寶石,無論如何,運行在jvm:D)與馬拉松測試(一個Java swing應用程序)和IM處理貨幣數字有點麻煩。愚蠢的Ruby貨幣

我不使用Rails(不知道我是否可以使用rails甚至與馬拉松),我不知道/沒有發現如何將字符串轉換爲小數或雙。

我與MARATON代碼是這樣的

$saldoDisponivel = get_p("com.company.app.view.layout.objetos.JTextField1", "Text") 

換句話說,saldoDisponivel得到一個字符串(如:3.232,20)。 我也有另一個字符串英勇=「100,00」當我做

$saldoDisponivel = $saldoDisponivel + valor 

當然我得到3.232,20100,00(加2串right..lol)

我雖然紅寶石能在java中我會轉換那些BigDecimails(使用java.math.BigDecimal),但在純Ruby中,不知道如何。

提前。

+0

這些全局變量?爲什麼美元的跡象? – Wes 2011-04-15 22:56:40

+0

是的,即時通訊使用他們cz im在模塊上使用它,並且在不同的.rb上有超過1個metod來調用它。 另外我忘了提及,我的主要字符串是像3.222,32 ..所以..我試了兩個答案,它沒有工作.. – Leonardo 2011-04-18 16:44:17

回答

0

你應該紅寶石使用BigDecimal的,以及讓你沒有任何浮點錯誤:

require 'bigdecimal' 

x = '3232.20' 
y = '100.00' 

xb = BigDecimal.new x 
yb = BigDecimal.new y 

r = xb + xy 

r.to_s('F') 

> r.to_s('F') 
=> "3332.2" 
+0

工作就像一個魅力x = x.gsub(「,」,「。」)和y = y.gsub(「。」,「」) ) y = y.gsub(「,」,「。」)在分離器上工作,然後使用bigdecimal .. thks – Leonardo 2011-04-18 17:00:08

-1
$saldoDisponivel=($saldoDisponivel.to_f + valor.to_f).to_s 

福爾察科特NISSO ...

+0

此解決方案引入浮點錯誤,並通過使用最後一步截斷小數位:' ('1.2'.to_f +'2.1'.to_f).to_i => 3' – Wes 2011-04-15 23:10:03

+0

已更正:我錯誤輸入了_ – 2011-04-15 23:31:59

+0

轉換爲浮點數仍會引入浮點數加法錯誤。有關示例,請參閱BigDecimal文檔。我做了x = x.gsub(「。」,「」) – Wes 2011-04-15 23:34:47

0

如果你使用更舒適java BigDecimal,你可以直接從馬拉松腳本中使用java.math.BigDecimal。

x = java.math.BigDecimal.new '5.0'
y = java.math.BigDecimal.new '10.0'
puts x.add(y)
=> 15.0

+0

它工作的形式浮點數...但它不適用於像「3.222,32」 ..我知道我必須解析刪除「點」,但我不知道如何...我在java上使用此:DecimalFormat dff =(DecimalFormat)DecimalFormat.getInstance(); \t \t \t dff.setParseBigDecimal(true); \t \t \t BigDecimal valor = null; \t \t \t valor =(BigDecimal)dff.parse(Valor); – Leonardo 2011-04-18 16:46:30

+0

你在java中做什麼,你也可以在Marathon腳本中做。 – KDM 2011-04-18 17:18:52