Skip to content
Back to formatted view

Raw Message

Message-ID: <20080303121502.M37046@centroin.com.br>
Date: 2008-03-03T12:17:26Z
From: Alberto Monteiro
Subject: R function to convert a number to text
In-Reply-To: <47CBD514.1010003@bitwrit.com.au>

Jim Lemon wrote:
>
> I got bored after the millions, but this should handle the smaller 
> numbers, and you can always extend it.
> 
> digits2text<-function(x,mult="") {
>   units<-c("one","two","three","four","five",
>    "six","seven","eight","nine")
>   teens<-c("ten","eleven","twelve","thirteen","fourteen",
>    "fifteen","sixteen","seventeen","eighteen","nineteen")
>   tens<-c("ten","twenty","thirty","forty","fifty",
>    "sixty","seventy","eighty","ninety")
>   digits<-rev(as.numeric(strsplit(as.character(x),"")[[1]]))
>   digilen<-length(digits)
>   if(digilen == 2 && digits[2] == 1) return(teens[digits[1]+1])
>   digitext<-units[digits[1]]
>   if(digilen > 1) digitext<-c(digitext,tens[digits[2]])
>   if(digilen > 2) digitext<-c(digitext,"hundred",units[digits[3]])
>   if(digilen > 3) digitext<-
>    c(digitext,digits2text(floor(x/1000),"thousand"))
>   if(digilen > 6) digitext<-
>    c(digitext,digits2text(floor(x/1000000),"million"))
>   return(paste(c(rev(digitext),mult),sep="",collapse=" "))
> }
> 
Be careful, the function does not handle "empty" fields:

> digits2text(10^6 + 10)
[1] "one million one thousand hundred thousand hundred ten "

Alberto Monteiro (today I am purely destructive)