2013-10-21 52 views
2
require 'bigdecimal' 

sum = BigDecimal.new("2.33") 

sum1 = BigDecimal.new("3.68") 

sum2 = sum + sum1 

puts sum2 
# 0.601E1 

# my attempt at converting scientific notation 
puts sum2.to_i 
# 6 
  1. 如何轉換0.601E16.1BigDecimal的BigDecimal - 基本計算

  2. 我在哪裏可以找到一些基本的BigDecimal資源?

  3. 是否有其他基本BigDecimal我應該記住的概念?

+0

是的,您可以使用'puts#to_f'在人類符號中打印一個數字,但它只適用於小數字和低精度數字。嘗試'BigDecimal('1'* 20).to_f'或'BigDecimal('0。'+'5'* 20).to_f'。 –

回答

2

1)您必須撥打#to_sparamter 'F'

sum2.to_s('F') 

的解決方案,別人給予你是不是很大,如果轉換的BigDecimal到眼前浮動,你丟失精度。

2)Ruby documentation很不錯。

3)重要的概念是:不要將使用BigDecimal計算的即時結果轉換爲浮點數(即IEE浮點數)。你將以這種方式摧毀所有的努力。這是一個很簡單的概念,但很多人都沒有。

+0

爲什麼要降薪?你甚至試過這個解決方案嗎?這是打印出有效的號碼的唯一有效方法,不管號碼多大。試試這個:'的BigDecimal(「1」 * 20).to_f' –

+2

對我來說很好+1 :) – tihom

+0

謝謝你,先生:) –

0

下面是一個嘗試使用BigDecimal#to_f

require 'bigdecimal' 

sum = BigDecimal.new("2.33") 

sum1 = BigDecimal.new("3.68") 

sum2 = sum + sum1 
puts sum2.to_f 
# >> 6.01 
0
(BigDecimal.new("2.33") + BigDecimal.new("3.68")).to_f