# Roman Numerals • ### Question

• I am new at VB 2010 and am trying to covert 1-10 into roman numerals so that when you input a 1-10 the roman numeral I-X comes up, this is what I've got so far,and it won't display

Public

Class Form1

Private Sub Btnconvert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnconvert.Click

'declare the intergers

Dim intDecimal As Integer

Dim intDecimal {}Roman_Numeral

'displays the roman numerals

If intDecimal = 1 Then

Lblroman.Text =

"I"

ElseIf intDecimal = 2 Then

Lblroman.Text =

"II"

ElseIf intDecimal = 3 Then

Lblroman.Text =

"III"

ElseIf intDecimal = 4 Then

Lblroman.Text =

"IV"

ElseIf intDecimal = 5 Then

Lblroman.Text =

"V"

ElseIf intDecimal = 6 Then

Lblroman.Text =

"VI"

ElseIf intDecimal = 7 Then

Lblroman.Text =

"VII"

ElseIf intDecimal = 8 Then

Lblroman.Text =

"VIII"

ElseIf intDecimal = 9 Then

Lblroman.Text =

"IX"

ElseIf intDecimal = 10 Then

Lblroman.Text =

"X"

End If

Lblroman.Text ={

""} FormatNumber

End

End Sub

Private Sub Btnexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnexit.Click

Me.Close()

Thanx

Monday, November 1, 2010 8:00 PM

• You haven't set intDecimal to a value.  For instance, if the decimal value is being entered into TextBox1 then you would use

Dim intDecimal as Integer
intDecimal = Val(TextBox1.Text)

(but note that code will fail if the user has left the text box blank).

You could also look at the use of an array to hold the numeral strings, so you could simply use intDecimal as an index into an array.

lblRoman.Text=Numerals(intDecimal)

• Marked as answer by Wednesday, November 10, 2010 10:10 AM
Monday, November 1, 2010 8:10 PM
• Have a look at this:

`Dim iNumber as integer = 1`
`Dim ary As String() = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"}`
`Lblroman.Text = ary(iNumber - 1) 'ary is zero based`
"CherryHillRich" wrote in message news:9635bb56-a9ff-4301-84a8-b1a3b2eca245...

I am new at VB 2010 and am trying to covert 1-10 into roman numerals so that when you input a 1-10 the roman numeral I-X comes up, this is what I've got so far,and it won't display

Public

Class Form1

Private Sub Btnconvert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnconvert.Click

'declare the intergers

Dim intDecimal As Integer

Dim intDecimal {}Roman_Numeral

'displays the roman numerals

If intDecimal = 1 Then

Lblroman.Text =

"I"

ElseIf intDecimal = 2 Then

Lblroman.Text =

"II"

ElseIf intDecimal = 3 Then

Lblroman.Text =

"III"

ElseIf intDecimal = 4 Then

Lblroman.Text =

"IV"

ElseIf intDecimal = 5 Then

Lblroman.Text =

"V"

ElseIf intDecimal = 6 Then

Lblroman.Text =

"VI"

ElseIf intDecimal = 7 Then

Lblroman.Text =

"VII"

ElseIf intDecimal = 8 Then

Lblroman.Text =

"VIII"

ElseIf intDecimal = 9 Then

Lblroman.Text =

"IX"

ElseIf intDecimal = 10 Then

Lblroman.Text =

"X"

End If

Lblroman.Text ={

""} FormatNumber

End

End Sub

Private Sub Btnexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnexit.Click

Me.Close()

Thanx

Harry
• Marked as answer by Wednesday, November 10, 2010 10:10 AM
Monday, November 1, 2010 8:24 PM
• Roman only used the number 1 to 3,899,999 in there numerical system.

Here is a small class that can translate any integer ( 1 to 3,899,999 ) to roman numeral

It is not a solution to your problem, but you might be interested to see

```Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Val As Integer
If Integer.TryParse(TextBox1.Text, Val) And Val > 0 And Val < 3899999 Then
TextBox2.Text = Roman.Int2Roman(Val)
Else
TextBox2.Text = "Invalid value"
End If
End Sub
End Class

Class Roman
Private Shared RomanToken() As String = {"(M)", "(C)(M)", "(D)", "(C)(D)", "(C)", _
"(X)(C)", "(L)", "(X)(L)", "(X)", "M(X)", _
"(V)", "M(V)", "M", "CM", "D", "CD", "C", _
"XC", "L", "XL", "X", "IX", "V", "IV", "I"}
Private Shared TokenValue() As Integer = {1000000, 900000, 500000, 400000, 100000, 90000, _
50000, 40000, 10000, 9000, 5000, 4000, 1000, 900, _
500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}

Public Shared Function Int2Roman(ByVal IntValue As Integer) As String
If IntValue > 3899999 Or IntValue < 1 Then
Throw New Exception("Overflow: Roman only used the numbers 1 to 3,899,999")
Else
Dim RomanNumeral As String = ""
For index As Integer = 0 To RomanToken.Count - 1
Dim Tp As Integer = IntValue \ TokenValue(index)
IntValue = IntValue - Tp * TokenValue(index)
While Tp > 0
RomanNumeral &= RomanToken(index)
Tp -= 1
End While
Next
Return RomanNumeral
End If
End Function
End Class
```
• Proposed as answer by Tuesday, November 2, 2010 4:00 PM
• Marked as answer by Wednesday, November 10, 2010 10:12 AM
Tuesday, November 2, 2010 2:48 PM

### All replies

• You haven't set intDecimal to a value.  For instance, if the decimal value is being entered into TextBox1 then you would use

Dim intDecimal as Integer
intDecimal = Val(TextBox1.Text)

(but note that code will fail if the user has left the text box blank).

You could also look at the use of an array to hold the numeral strings, so you could simply use intDecimal as an index into an array.

lblRoman.Text=Numerals(intDecimal)

• Marked as answer by Wednesday, November 10, 2010 10:10 AM
Monday, November 1, 2010 8:10 PM
• Have a look at this:

`Dim iNumber as integer = 1`
`Dim ary As String() = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"}`
`Lblroman.Text = ary(iNumber - 1) 'ary is zero based`
"CherryHillRich" wrote in message news:9635bb56-a9ff-4301-84a8-b1a3b2eca245...

I am new at VB 2010 and am trying to covert 1-10 into roman numerals so that when you input a 1-10 the roman numeral I-X comes up, this is what I've got so far,and it won't display

Public

Class Form1

Private Sub Btnconvert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnconvert.Click

'declare the intergers

Dim intDecimal As Integer

Dim intDecimal {}Roman_Numeral

'displays the roman numerals

If intDecimal = 1 Then

Lblroman.Text =

"I"

ElseIf intDecimal = 2 Then

Lblroman.Text =

"II"

ElseIf intDecimal = 3 Then

Lblroman.Text =

"III"

ElseIf intDecimal = 4 Then

Lblroman.Text =

"IV"

ElseIf intDecimal = 5 Then

Lblroman.Text =

"V"

ElseIf intDecimal = 6 Then

Lblroman.Text =

"VI"

ElseIf intDecimal = 7 Then

Lblroman.Text =

"VII"

ElseIf intDecimal = 8 Then

Lblroman.Text =

"VIII"

ElseIf intDecimal = 9 Then

Lblroman.Text =

"IX"

ElseIf intDecimal = 10 Then

Lblroman.Text =

"X"

End If

Lblroman.Text ={

""} FormatNumber

End

End Sub

Private Sub Btnexit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnexit.Click

Me.Close()

Thanx

Harry
• Marked as answer by Wednesday, November 10, 2010 10:10 AM
Monday, November 1, 2010 8:24 PM
• Roman only used the number 1 to 3,899,999 in there numerical system.

Here is a small class that can translate any integer ( 1 to 3,899,999 ) to roman numeral

It is not a solution to your problem, but you might be interested to see

```Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Val As Integer
If Integer.TryParse(TextBox1.Text, Val) And Val > 0 And Val < 3899999 Then
TextBox2.Text = Roman.Int2Roman(Val)
Else
TextBox2.Text = "Invalid value"
End If
End Sub
End Class

Class Roman
Private Shared RomanToken() As String = {"(M)", "(C)(M)", "(D)", "(C)(D)", "(C)", _
"(X)(C)", "(L)", "(X)(L)", "(X)", "M(X)", _
"(V)", "M(V)", "M", "CM", "D", "CD", "C", _
"XC", "L", "XL", "X", "IX", "V", "IV", "I"}
Private Shared TokenValue() As Integer = {1000000, 900000, 500000, 400000, 100000, 90000, _
50000, 40000, 10000, 9000, 5000, 4000, 1000, 900, _
500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}

Public Shared Function Int2Roman(ByVal IntValue As Integer) As String
If IntValue > 3899999 Or IntValue < 1 Then
Throw New Exception("Overflow: Roman only used the numbers 1 to 3,899,999")
Else
Dim RomanNumeral As String = ""
For index As Integer = 0 To RomanToken.Count - 1
Dim Tp As Integer = IntValue \ TokenValue(index)
IntValue = IntValue - Tp * TokenValue(index)
While Tp > 0
RomanNumeral &= RomanToken(index)
Tp -= 1
End While
Next
Return RomanNumeral
End If
End Function
End Class
```
• Proposed as answer by Tuesday, November 2, 2010 4:00 PM
• Marked as answer by Wednesday, November 10, 2010 10:12 AM
Tuesday, November 2, 2010 2:48 PM