# BigDecimal#to\_i/to\_int $B$N5sF0$K$D$$$F(B

**URL:** <https://www.ruby-forum.com/t/bigdecimal-to-i-to-int-b-n5sf0-k-d-f-b/177200>\
**Category:** Development\
**Created:** [October 13, 2009, 9:44am UTC](https://www.ruby-forum.com/t/bigdecimal-to-i-to-int-b-n5sf0-k-d-f-b/177200 "2009-10-13T09:44:01Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![KAKUTANI\_Shintaro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/9fc348/32.png) [@KAKUTANI\_Shintaro](https://www.ruby-forum.com/u/KAKUTANI_Shintaro)\
**Post date:** [October 13, 2009, 9:44am UTC](https://www.ruby-forum.com/t/bigdecimal-to-i-to-int-b-n5sf0-k-d-f-b/177200/1 "2009-10-13T09:44:01Z")

</div>

e$B$+$/$?$K$G$9!#e(B

rubyspec  
e$B$re(B1.8e$B%?!\<%2%C%H$GF0$+$7$F$$$F!"I85-$Ne(Bspece$B$,\<j85$G$ODL$i$J$$$3$H$K5$$E$-$^$7$?!#e(B  
e$B2?$,@5$7$$$N$+\<+J,$G$O$o$+$i$J$$$N$G65$($F$b$i$($k$H$&$l$7$$$G$9!#e(B

BigDecimale$B$Ge(B Infinitye$B$He(BNaN e$B$re(B to\_i/to\_int  
e$B$9$k$H!"e(B  
e$B\<j85$N4D6-$G$O\<!$N$h$&$K$J$j$^$7$?e(B:  
(e$BF0$+$7$F$$$k%P!\<%8%g%s$,\>/$7A0$N$b$N$G62=L$G$9e(B)

$ /usr/bin/ruby -v -rbigdecimal -e ‘%w[Infinity NaN].each{|s| v =  
BigDecimal.new(s); i = v.to\_i rescue $!.class; print “#{v}:”;p i}’  
ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0]  
Infinity:nil  
NaN:nil

$ ruby -v -rbigdecimal -e ‘%w[Infinity NaN].each{|s| v =  
BigDecimal.new(s); i = v.to\_i rescue $!.class; print “#{v}:”;p i}’  
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9]  
Infinity:FloatDomainError  
NaN:FloatDomainError

$ ruby19 -v -rbigdecimal -e ‘%w[Infinity NaN].each{|s| v =  
BigDecimal.new(s); i = v.to\_i rescue $!.class; print “#{v}:”;p i}’  
ruby 1.9.2dev (2009-10-05 trunk 25235) [i386-darwin9.8.0]  
Infinity:FloatDomainError  
NaN:FloatDomainError

e$B$k$j$^$N5-=R$Oe(B1.8e$B$be(B1.9e$B$b!Ve(BInfinity e$B$de(B NaN  
e$B$N$H$-!"e(Bi e$B$Oe(B nil e$B$K$J$j$^$9!W$G$7$?!#e(B  
[http://doc.okkez.net/187/view/method/BigDecimal/i/to\_i](http://doc.okkez.net/187/view/method/BigDecimal/i/to_i)  
[http://doc.okkez.net/192/view/method/BigDecimal/i/to\_i](http://doc.okkez.net/192/view/method/BigDecimal/i/to_i)

e$B\<j85$G\<:GT$7$?e(Bspece$B$O!"e(B  
[http://github.com/rubyspec/rubyspec/blob/master/library/bigdecimal/shared/to\_int.rb](http://github.com/rubyspec/rubyspec/blob/master/library/bigdecimal/shared/to_int.rb)  
e$B$Ne(B5e$B9TL$He(B6e$B9TL$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![KAKUTANI\_Shintaro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/9fc348/32.png) [@KAKUTANI\_Shintaro](https://www.ruby-forum.com/u/KAKUTANI_Shintaro)\
**Post date:** [October 14, 2009, 4:38am UTC](https://www.ruby-forum.com/t/bigdecimal-to-i-to-int-b-n5sf0-k-d-f-b/177200/2 "2009-10-14T04:38:00Z")

</div>

e$B:XF#$H?=$7$^$9!#e(B

On Tue, 13 Oct 2009 16:43:24 +0900  
KAKUTANI Shintaro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> rubyspec e$B$re(B1.8e$B%?!\<%2%C%H$GF0$+$7$F$$$F!"I85-$Ne(Bspece$B$,\<j85$G$ODL$i$J$$$3$H$K5$$E$-$^$7$?!#e(B  
> e$B2?$,@5$7$$$N$+\<+J,$G$O$o$+$i$J$$$N$G65$($F$b$i$($k$H$&$l$7$$$G$9!#e(B

e$BKM$b$A$c$s$H$OJ,$+$C$F$$$J$$$N$G$9$,!";29M$K$J$j$=$&$J\>pJs$rJB$Y$F$\_$^$9!#e(B

> ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9]  
> Infinity:FloatDomainError  
> NaN:FloatDomainError

e$B$^$:e(B1.8e$B$K4X$7$F$G$9$,!"e(B1.8.7e$B$G%3%_%C%H%_%9$,5/$-$F!"0U?^$7$J$$;EMMJQ99$K$J$C$F$7$^$C$Fe(B  
e$B$$$k$h$&$J5$$,$7$^$9!#e(B

1.8.6e$B$be(B1.8.7e$B$b!":G=i$N%j%j!\<%9;~e(B(pl0)e$B$O!"Nc30$,5/$3$j$^$;$s$G$7$?!#%=!\<%9$rAL$k$H!"e(B  
e$BNc30$,5/$-$k$h$&$K$J$C$?$N$Oe(B1.8.7-pl173e$B$+$i$N$h$&$G$9!#e(B160e$B$G$Oe(Bnile$B$,JV$k$O$:$G$9!#e(B

1.8.7e$B%V%i%s%A$r8+$k$H!"e(Br23645e$B$GNc30$,\>e$,$k$h$&$K$J$C$F$$$^$9!#$3$NItJ,$N%m%0$r8+$k$H!"e(B

r23645 | shyouhei | 2009-06-08 08:37:55 +0900 (Mon, 08 Jun 2009) | 10  
lines

merge revision(s) 23610:23613:  
\* ext/bigdecimal/bigdecimal.c (VpAlloc): avoid ALLOCA\_N() to  
avoid  
segmentation fault caused by (insanely) long decimal values.  
backported from 1.9.  
\* ext/bigdecimal/bigdecimal.c (BigDecimal\_dump, BigDecimal\_to\_i,  
BigDecimal\_to\_f, BigDecimal\_to\_s, BigDecimal\_split,  
BigDecimal\_inspect): ditto.  
\* ext/bigdecimal/bigdecimal.c (BigDecimal\_to\_f): returns Inf if  
exp is bigger than DBL\_MANT\_DIG.

e$B$H$J$C$F$$$F!"Nc30$r5s$2$k$h$&;EMMJQ99$9$k;]$N5-=R$O0l@Z8+$i$l$^$;$s!#e(B

e$B$=$7$F$5$i$K%^!\<%885$H;W$7$-e(B1.8e$B%V%i%s%A$N%m%0$r8+$k$H!“e(Br23613e$B$GNc30$,\>e$,$k$h$&$Ke(B  
e$B;EMMJQ99$7$F$$$k$N$K!”$^$D$b$H$5$s$,$=$N;]$r%m%0$K;D$7$F$$$J$$;v$b$o$+$j$^$9!#e(B

r23613 | matz | 2009-06-01 09:14:25 +0900 (e$B7ne(B, 01 6e$B7ne(B 2009)  
| 6 lines

- ext/bigdecimal/bigdecimal.c (VpAlloc): avoid ALLOCA\_N() to avoid  
segmentation fault caused by (insanely) long decimal values.  
backported from 1.9.
- ext/bigdecimal/bigdecimal.c (BigDecimal\_dump, BigDecimal\_to\_i,  
BigDecimal\_to\_f, BigDecimal\_to\_s, BigDecimal\_split,  
BigDecimal\_inspect): ditto.

e$B$J$N$G!";d$N?dM}$H$7$Fe(B

1. 

e$BKNIt$5$s$O85!9!“e(B1.8e$B%V%i%s%A$N%P%0%U%#%/%9ItJ,$@$1$re(B1.8.7e$B%V%i%s%A$K%^!\<%8$7$?$+$C$?e(B  
2.  
e$B$^$D$b$H$5$s$,=q$$$?e(B1.8e$B%V%i%s%A$N%m%0$K$O%P%0%U%#%/%9$K4X$9$k5-=R$7$+$J$+$C$?e(B(e$BIT9,e(B1)  
e$B$N$G!“KNIt$5$s$O$=$l$r?.$8$F$7$^$C$?!#e(B  
3.  
e$BKNIt$5$s$b%m%0$O3NG’$7$?$,!”%m%0$HL54X78$JJQ99$,\<B:]$N%3!\<%I$K$”$j!“;EMMJQ99$5$l$Fe(B  
e$B$$$k;v$K5$$E$/$^$G$K$O;j$i$J$+$C$?e(B(e$BIT9,e(B2)e$B!#e(B  
4.  
e$B7k2L!”%P%0%U%#%/%9$N$\_$N%^!\<%8$N$D$b$j$,!"e(B1.8.7e$BCf$N;EMMJQ99$K$J$C$F$7$^$C$?!#e(B  
5. e$B$=$N$^$^\<!$Ne(B1.8.7e$B%Q%C%A%l%Y%k%j%j!\<%9e(B

e$B$H$$$&N.$l$rA[A|$9$k$N$G$9$,!"$I$&$G$7$g$&$+e(B \> e$BKNIt$5$se(B

e$B$"$k$$$O?dM}e(BBe$B$H$7$F$Oe(B

3’.  
e$BKNIt$5$s$O%m%0$K:$C$F$$$J$$;EMMJQ99$r3NG’$7$?$,!“$b$H$b$H$N;EMM$,!V%P%0$G$”$k!We(B  
e$B$HH=CG$7$?$?$a%^!\<%8$7$?!#$7$+$7%m%0$K:$;$J$$$N$O$=$N$^$^$@$C$?!#e(B

e$B$H$$$&9bEY$JJ\*$b$"$j$($^$9$,!"2DG=@-$ODc$$5$$,$7$^$9!#e(B

# 

e$B$H$j$“$($:!”%3%\_%C%H%m%0$H%A%'%C%/%$%s$NFbMF$O$A$c$s$HBP1~$5$;$F$/$@$5$$e(B

> e$B$^$D$b$H$5$se(B

> $ ruby19 -v -rbigdecimal -e ‘%w[Infinity NaN].each{|s| v = BigDecimal.new(s); i = v.to\_i rescue $!.class; print “#{v}:”;p i}’  
> ruby 1.9.2dev (2009-10-05 trunk 25235) [i386-darwin9.8.0]  
> Infinity:FloatDomainError  
> NaN:FloatDomainError

1.9e$B$K4X$7$F$O!“e(B  
e$B$^$D$b$H$5$s$,e(B[ruby-dev:37195]e$B$G$3$l$r!V$”$^$jNI$/$J$$@\_7W!W$HH=CGe(B  
e$B$5$l$?$?$a!"Nc30$,H/@8$9$k$h$&$K$J$C$?$h$&$G$9!#e(Btrunke$B$Ne(Br20359e$B$G$9!#e(B  
e$B$3$l$Oe(B1.9.1e$B$NA0$Ne(Btrunke$B$J$N$G!“e(B1.8e$B$+$ie(B1.9e$B$OL@\<(E\*$K;EMMJQ99$5$l$?!”$H$$$&OC$@$H;W$C$Fe(B  
e$B$$$^$9!#e(B

e$B0J\>e!";29M$K$J$l$P9,$$$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![KAKUTANI\_Shintaro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/9fc348/32.png) [@KAKUTANI\_Shintaro](https://www.ruby-forum.com/u/KAKUTANI_Shintaro)\
**Post date:** [October 15, 2009, 4:28am UTC](https://www.ruby-forum.com/t/bigdecimal-to-i-to-int-b-n5sf0-k-d-f-b/177200/3 "2009-10-15T04:28:51Z")

</div>

Tadashi S. e$B$5$s$O=q$-$^$7$?e(B:

> 1. e$BKNIt$5$s$O85!9!"e(B1.8e$B%V%i%s%A$N%P%0%U%#%/%9ItJ,$@$1$re(B1.8.7e$B%V%i%s%A$K%^!\<%8$7$?$+$C$?e(B
> 2. e$B$^$D$b$H$5$s$,=q$$$?e(B1.8e$B%V%i%s%A$N%m%0$K$O%P%0%U%#%/%9$K4X$9$k5-=R$7$+$J$+$C$?e(B(e$BIT9,e(B1)  
> e$B$N$G!"KNIt$5$s$O$=$l$r?.$8$F$7$^$C$?!#e(B
> 3. e$BKNIt$5$s$b%m%0$O3NG’$7$?$,!"%m%0$HL54X78$JJQ99$,\<B:]$N%3!\<%I$K$"$j!";EMMJQ99$5$l$Fe(B  
> e$B$$$k;v$K5$$E$/$^$G$K$O;j$i$J$+$C$?e(B(e$BIT9,e(B2)e$B!#e(B
> 4. e$B7k2L!"%P%0%U%#%/%9$N$\_$N%^!\<%8$N$D$b$j$,!"e(B1.8.7e$BCf$N;EMMJQ99$K$J$C$F$7$^$C$?!#e(B
> 5. e$B$=$N$^$^\<!$Ne(B1.8.7e$B%Q%C%A%l%Y%k%j%j!\<%9e(B
> 
> e$B$H$$$&N.$l$rA[A|$9$k$N$G$9$,!"$I$&$G$7$g$&$+e(B \> e$BKNIt$5$se(B

e$B$"$C$F$^$9!#$"$($FDI2C$9$l$Pe(B

1. 

1.8.7e$B$K$Oe(Btest/bigdecimale$B$,$J$$$N$G%j%0%l%C%7%g%s$K5$$E$+$J$+$C$?e(B

e$B$b860x$KF~$l$F$b$$$$$+$b$7$l$^$;$s!#$4$a$s$J$5$$!#e(B1.8.7e$B$K4X$7$F$O0U?^$7$J$$;EMMe(B  
e$BJQ99$J$N$G!"La$7$F$\*$3$&$H;W$$$^$9!#e(B

# e$B\<B:]!"$I$&$$$&5sF0$,K\>$^$7$$$+$K4X$7$F$O5DO@$,I,MW$+!#e(B
