Ruby/Number/BigDecimal
Материал из Wiki.crossplatform.ru
Содержание |
Add value to BigDecimal
require "bigdecimal" two_thirds = (BigDecimal("2", 13) / 3) two_thirds.add(1, 1).to_s # => "0.2E1" two_thirds.add(1, 4).to_s # => "0.1667E1"
Big decimal calculation
require "bigdecimal" (BigDecimal("2") / BigDecimal("3")).to_s # => "0.6666666666666667E0" 2.0/3 # => 0.666666666666667
Calculation on BigDecimal in a function
require "bigdecimal" def two_thirds(precision) (BigDecimal("2", precision) / BigDecimal("3")).to_s end two_thirds(1) # => "0.6666666666666667E0" two_thirds(4) # => "0.6666666666666667E0" two_thirds(5) # => "0.66666666666666666667E0" two_thirds(9) # => "0.666666666666666666666667E0" two_thirds(13) # => "0.6666666666666666666666666667E0"
Convert BigDecimal to string
require "bigdecimal" two_thirds = (BigDecimal("2", 13) / 3) two_thirds.to_s # => "0.666666666666666666666666666666666667E0" (two_thirds + 1).to_s # => "0.1666666666666666666666666666666666667E1"
Get the square root for a BigDecimal
require "bigdecimal" require "bigdecimal/math" include BigMath two = BigDecimal("2") BigMath::sqrt(two, 28).round(28).to_s("F") # => "1.4142135623730950488016887242"
PI in BigDecimal
require "bigdecimal" require "bigdecimal/math" include BigMath Math::PI # => 3.14159265358979 Math::PI.class # => Float BigDecimal.PI(1).to_s # => "0.31415926535897932364198143965603E1" BigDecimal.PI(20).to_s # => "0.3141592653589793238462643383279502883919859293521427E1"
precs of BigDecimal
require "bigdecimal" puts BigDecimal("2").precs # => [4, 8] puts BigDecimal("2.000000000000").precs # => [4, 20] puts BigDecimal("2.000000000001").precs # => [16, 20]
Round a BigDecimal
require "bigdecimal" require "bigdecimal/math" include BigMath two = BigDecimal("2") BigMath::sqrt(two, 10).round(10).to_s("F") # => "1.4142135624"
split a big number
require "bigdecimal" puts BigDecimal("105000").split # => [1, "105", 10, 6] # That is, 0.105*(10**6) puts BigDecimal("-0.005").split # => [-1, "5", 10, -2] # That is, -1 * (0.5*(10**-2))
to_f cuts numbers
require "bigdecimal" nm = "0.123456789012345678901234567890123456789" nm.to_f # => 0.123456789012346 BigDecimal(nm).to_s # => "0.123456789012345678901234567890123456789E0"
.to_s("F")
require "bigdecimal" (a = BigDecimal("2.01")).precs # => [8, 8] (b = BigDecimal("3.01")).precs # => [8, 8] (product = a * b).to_s("F") # => "6.0501" product.precs # => [8, 24]