BigDecimal - 基本计算

时间:2013-10-21 09:39:33

标签: ruby bigdecimal

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.601E1中将6.1转换为BigDecimal

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

  3. 我还应该记住其他基本的 BigDecimal概念吗?

4 个答案:

答案 0 :(得分:2)

1)您必须使用#to_s致电paramter 'F'

sum2.to_s('F')

其他人给你的解决方案并不好,如果你将BigDecimal转换为直接浮点数,你会失去精确度。

2)Ruby documentation非常好。

3)重要的概念是:不要将使用BigDecimal计算的立即结果转换为Float(这是IEE浮点数)。你将以这种方式摧毁所有的努力。这是一个如此简单的概念,但很多人都没有。

答案 1 :(得分: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

答案 2 :(得分:0)

  1. 查看this method

  2. 有一些很好的例子inlined in the docs themselves,说明了如何使用一些不同的电话。

  3. 再一次,文档有很多好的信息 - 要记住的是possible to have both positive and negative zeroes

  4. 很抱歉,我意识到这里的所有内容都指向了文档,但老实说,这是我在寻找答案时所看到的第一个地方。

答案 3 :(得分:0)

 (BigDecimal.new("2.33") + BigDecimal.new("3.68")).to_f