Forum: IronRuby IronRuby and System::Decimal

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
D4ced0fe3718f187173fc05dd7f33f57?d=identicon&s=25 Ben Hall (Guest)
on 2008-11-07 01:36
(Received via mailing list)
Hello,

Just playing around with some .Net interop and the Decimal type. When
I do puts, I expected that this would have given me the underlying
number, or at least call to_string.

Instead I got the following behaviour, with the object type being
outputted.

>>> @d = System::Decimal.MinValue
=> #<System::Decimal:0x000005c>
>>> puts @d
#<System::Decimal:0x000005e>
=> nil
>>> puts @d.to_string
-79228162514264337593543950335
=> nil

Is this by design?

Thanks

Ben
D4ced0fe3718f187173fc05dd7f33f57?d=identicon&s=25 Ben Hall (Guest)
on 2008-11-07 01:45
(Received via mailing list)
Also, how would I compare decimals in ruby, as Ruby doesn't have a
decimal type built in?

I wanted to do something like

@d > '12312.123123'.to_d

However, that doesn't appear to be possible.  I attempt to do to_f,
but I got the following error:
ArgumentError: Object must be of type Decimal.

>From mscorlib:0:in
`CompareTo'E:\IronRuby\r156\src\IronRuby.Libraries\Extensions\IComparableOps.cs:24:in
`<=>'

Any ideas?

Thanks
Ben
F983f0c990cba2fe743ef62a975ec99c?d=identicon&s=25 Curt Hagenlocher (Guest)
on 2008-11-07 01:51
(Received via mailing list)
Originally, I had hacked in "decimal" to be our BigDecimal
representation.  Now that we have a real BigDecimal (courtesy of Peter
Bacon Darwin), the CLR decimal type has become an orphan -- it doesn't
really have any direct support in IronRuby, so you just get the same
behavior that you'd get for any other random CLR object.

Let me pose this question to the list: which classes in the BCL (if any)
do you think should get the "Rubification" treatment?
68f1bd9e9a7d9d10f0278c6535f700fe?d=identicon&s=25 Michael Letterle (Guest)
on 2008-11-07 02:29
(Received via mailing list)
Here's some helper methods I've used for making System::Decimal a little
more palatable:

class Object

    def to_clr_dec
        System::Decimal.parse(self.to_s)
    end
    def to_clr_int
        System::Int32.parse(self.to_s)
    end
end

class System::Decimal
        def + other
            System::Decimal.Add(self, other)
        end

        def - other
            System::Decimal.Subtract(self, other)
        end

        def * other
            System::Decimal.Multiply(self, other)
        end

        def to_f
            self.to_string.to_s.to_f
        end

        def inspect
            to_f
        end

end


FWIW I'd personally rather see "rubification" done this way, then in C#
libraries...
This topic is locked and can not be replied to.