最近在对比不同语言的BigDecimal的表现,以期选择一个最适合做商业计算的。
Groovy
int和BigDecimal运算,结果是BigDecimal;但是BigDecimal和Double运算,结果是Double。有点可惜,还要再研究一下。
x=3.0g
y = (x ** (1g/2)) * 1g
z = x ** 2
println(y)
println(x.getClass())
println(y.getClass())
println("z: " + z + " is " + z.getClass())
Double a=1.0
b=1.0g
c=a*b
println("c: " + c + " is " + c.getClass())
-------- Result is ---------
Output of Script 23 ms
1.7320508075688772
class java.math.BigDecimal
class java.lang.Double
z: 9.00 is class java.math.BigDecimal
c: 1.0 is class java.lang.Double
Ruby
我们可以很清晰的看到,BigDecimal在Ruby是一等公民,只要计算中涉及到BigDecimal,计算结果就会升级到BigDecimal。试到这里,我只想说一句:“Yay! What a perfect language for money computing!”
Samuels-MBP:~ sam$ irb
irb(main):001:0> require 'bigdecimal'
=> true
irb(main):003:0> 1.class
=> Fixnum
irb(main):004:0> 1.0.class
=> Float
irb(main):005:0> dec=BigDecimal.new(100)
=> #<BigDecimal:7fe92901c240,'0.1E3',9(27)>
irb(main):006:0> dec.class
=> BigDecimal
irb(main):007:0> (1+dec).class
=> BigDecimal
irb(main):008:0> (1.0+dec).class
=> BigDecimal
irb(main):009:0> (1.0*dec).class
=> BigDecimal
irb(main):010:0>








网友评论