将十进制值转换为单词?

时间:2014-03-16 09:36:39

标签: vb.net visual-studio-2010 decimal-point decimalformat

大家好,我只是想知道你是否可以帮助我完成我的课程 这是关于“数字到单词的转换”,我找到了一个程序,但问题是我需要显示CENTS,它是一个十进制值,所以如何将该十进制值转换为单词?

EX。 150.25 =一百五十二十五美分

我正在使用Visual Studio 2010

3 个答案:

答案 0 :(得分:1)

以下是我提出的快速谷歌搜索:http://begeeben.wordpress.com/2012/03/20/convert-number-to-words-in-english/

似乎可以胜任这份工作!

Private Function ConvertNumberToENG(ByVal amount As String) As String

    Dim dollars, cents, temp
    Dim decimalPlace, count
    Dim place(9) As String
    place(2) = " Thousand "
    place(3) = " Million "
    place(4) = " Billion "
    place(5) = " Trillion "

    ' String representation of amount.
    amount = amount.Trim()
    amount = amount.Replace(",", "")
    ' Position of decimal place 0 if none.
    decimalPlace = amount.IndexOf(".")
    ' Convert cents and set string amount to dollar amount.
    If decimalPlace > 0 Then
        cents = GetTens(amount.Substring(decimalPlace + 1).PadRight(2, "0").Substring(0, 2))
        amount = amount.Substring(0, decimalPlace).Trim()
    End If

    count = 1
    Do While amount <> ""
        temp = GetHundreds(amount.Substring(Math.Max(amount.Length, 3) - 3))
        If temp <> "" Then dollars = temp & place(count) & dollars
        If amount.Length > 3 Then
            amount = amount.Substring(0, amount.Length - 3)
        Else
            amount = ""
        End If
        count = count + 1
    Loop

    Select Case dollars
        Case ""
            dollars = "No Dollars"
        Case "One"
            dollars = "One Dollar"
        Case Else
            dollars = dollars & " Dollars"
    End Select

    Select Case cents
        Case ""
            cents = " and No Cents"
        Case "One"
            cents = " and One Cent"
        Case Else
            cents = " and " & cents & " Cents"
    End Select

    ConvertNumberToENG = dollars & cents
End Function

' Converts a number from 100-999 into text
Function GetHundreds(ByVal amount As String) As String
    Dim Result As String
    If Not Integer.Parse(amount) = 0 Then
        amount = amount.PadLeft(3, "0")
        ' Convert the hundreds place.
        If amount.Substring(0, 1) <> "0" Then
            Result = GetDigit(amount.Substring(0, 1)) & " Hundred "
        End If
        ' Convert the tens and ones place.
        If amount.Substring(1, 1) <> "0" Then
            Result = Result & GetTens(amount.Substring(1))
        Else
            Result = Result & GetDigit(amount.Substring(2))
        End If
        GetHundreds = Result
    End If
End Function

' Converts a number from 10 to 99 into text.
Private Function GetTens(ByRef TensText As String) As String
    Dim Result As String
    Result = ""           ' Null out the temporary function value.
    If TensText.StartsWith("1") Then   ' If value between 10-19...
        Select Case Integer.Parse(TensText)
            Case 10 : Result = "Ten"
            Case 11 : Result = "Eleven"
            Case 12 : Result = "Twelve"
            Case 13 : Result = "Thirteen"
            Case 14 : Result = "Fourteen"
            Case 15 : Result = "Fifteen"
            Case 16 : Result = "Sixteen"
            Case 17 : Result = "Seventeen"
            Case 18 : Result = "Eighteen"
            Case 19 : Result = "Nineteen"
            Case Else
        End Select
    Else                                 ' If value between 20-99...
        Select Case Integer.Parse(TensText.Substring(0, 1))
            Case 2 : Result = "Twenty "
            Case 3 : Result = "Thirty "
            Case 4 : Result = "Forty "
            Case 5 : Result = "Fifty "
            Case 6 : Result = "Sixty "
            Case 7 : Result = "Seventy "
            Case 8 : Result = "Eighty "
            Case 9 : Result = "Ninety "
            Case Else
        End Select
        Result = Result & GetDigit(TensText.Substring(1, 1))  ' Retrieve ones place.
    End If
    GetTens = Result
End Function

' Converts a number from 1 to 9 into text.
Private Function GetDigit(ByRef Digit As String) As String
    Select Case Integer.Parse(Digit)
        Case 1 : GetDigit = "One"
        Case 2 : GetDigit = "Two"
        Case 3 : GetDigit = "Three"
        Case 4 : GetDigit = "Four"
        Case 5 : GetDigit = "Five"
        Case 6 : GetDigit = "Six"
        Case 7 : GetDigit = "Seven"
        Case 8 : GetDigit = "Eight"
        Case 9 : GetDigit = "Nine"
        Case Else : GetDigit = ""
    End Select
End Function

答案 1 :(得分:1)

因此,如果您已经有一个可以转换整数的程序,您可以轻松地将其重用为小数。

Dim d As Decimal = 150.25D
Dim arr = d.ToString(CultureInfo.InvariantCulture).Split("."C)
Dim phrase = runExistingProgram(Integer.Parse(arr(0))) + " dollars"
If arr.Length > 1 AndAlso arr(1) <> "0" Then
    phrase += " and " + runExistingProgram(Integer.Parse(arr(1))) + " cents"
End If

答案 2 :(得分:0)

Public Class ConverttoWord

Public Shared Function ConvertNum(ByVal Input As Decimal) As String


    Dim formatnumber As String
    Dim numparts(10) As String ' break the number into parts
    Dim suffix(10) As String 'trillion, billion .million etc
    Dim Wordparts(10) As String  'add the number parts and suffix

    Dim output As String = Nothing

    Dim T, B, M, TH, H, C As String

    formatnumber = Format(Input, "0000000000000.00") 'format the input number to a 16 characters string by suffixing and prefixing 0s
    '
    numparts(0) = primWord(Mid(formatnumber, 1, 1)) 'Trillion

    numparts(1) = primWord(Mid(formatnumber, 2, 1)) 'hundred billion..x
    numparts(2) = primWord(Mid(formatnumber, 3, 2)) 'billion

    numparts(3) = primWord(Mid(formatnumber, 5, 1)) 'hundred million...x
    numparts(4) = primWord(Mid(formatnumber, 6, 2)) 'million

    numparts(5) = primWord(Mid(formatnumber, 8, 1)) 'hundred thousand....x
    numparts(6) = primWord(Mid(formatnumber, 9, 2)) 'thousand


    numparts(7) = primWord(Mid(formatnumber, 11, 1)) 'hundred
    numparts(8) = primWord(Mid(formatnumber, 12, 2)) 'Tens

    numparts(9) = primWord(Mid(formatnumber, 15, 2)) 'cents



    suffix(0) = " Trillion "
        suffix(1) = " Hundred "  '....x
        suffix(2) = " Billion "
        suffix(3) = " Hundred " '  ....x
        suffix(4) = " Million "
        suffix(5) = " Hundred " ' .....x
        suffix(6) = " Thousand "
        suffix(7) = " Hundred "
    suffix(8) = " "
    suffix(9) = ""

    For i = 0 To 9
        If numparts(i) <> "" Then
            Wordparts(i) = numparts(i) & suffix(i)
        End If

        T = Wordparts(0)

        If Wordparts(1) <> "" And Wordparts(2) = "" Then
            B = Wordparts(1) & " Billion "
        Else
            B = Wordparts(1) & Wordparts(2)
        End If

        If Wordparts(3) <> "" And Wordparts(4) = "" Then
            M = Wordparts(3) & " Million "
        Else
            M = Wordparts(3) & Wordparts(4)
        End If

        If Wordparts(5) <> "" And Wordparts(6) = "" Then

            TH = Wordparts(5) & " Thousand "
        Else
            TH = Wordparts(5) & Wordparts(6)
        End If

        H = Wordparts(7) & Wordparts(8)
        If Wordparts(9) = "" Then
            C = " and  Zero Cents "
        Else
            C = " and " & Wordparts(9) & " Cents "
        End If
    Next
    output = T & B & M & TH & H & C
    Return output


End Function


Public Shared Function primWord(ByVal Num As Integer) As String

    'This two dimensional array store the primary word convertion of numbers 0 to 99
    primWord = ""
    Dim wordList(,) As Object = {{1, "One"}, {2, "Two"}, {3, "Three"}, {4, "Four"}, {5, "Five"},
{6, "Six "}, {7, "Seven "}, {8, "Eight "}, {9, "Nine "}, {10, "Ten "}, {11, "Eleven "}, {12, "Twelve "}, {13, "Thirteen "},
{14, "Fourteen "}, {15, "Fifteen "}, {16, "Sixteen "}, {17, "Seventeen "}, {18, "Eighteen "}, {19, "Nineteen "},
{20, "Twenty "}, {21, "Twenty One "}, {22, "Twenty Two"}, {23, "Twenty Three"}, {24, "Twenty Four"}, {25, "Twenty Five"},
{26, "Twenty Six"}, {27, "Twenty Seven"}, {28, "Twenty Eight"}, {29, "Twenty Nine"}, {30, "Thirty "}, {31, "Thirty One "},
{32, "Thirty Two"}, {33, "Thirty Three"}, {34, "Thirty Four"}, {35, "Thirty Five"}, {36, "Thirty Six"}, {37, "Thirty Seven"},
{38, "Thirty Eight"}, {39, "Thirty Nine"}, {40, "Forty "}, {41, "Forty One "}, {42, "Forty Two"}, {43, "Forty Three"},
{44, "Forty Four"}, {45, "Forty Five"}, {46, "Forty Six"}, {47, "Forty Seven"}, {48, "Forty Eight"}, {49, "Forty Nine"},
{50, "Fifty "}, {51, "Fifty One "}, {52, "Fifty Two"}, {53, "Fifty Three"}, {54, "Fifty Four"}, {55, "Fifty Five"},
{56, "Fifty Six"}, {57, "Fifty Seven"}, {58, "Fifty Eight"}, {59, "Fifty Nine"}, {60, "Sixty "}, {61, "Sixty One "},
{62, "Sixty Two"}, {63, "Sixty Three"}, {64, "Sixty Four"}, {65, "Sixty Five"}, {66, "Sixty Six"}, {67, "Sixty Seven"}, {68, "Sixty Eight"},
{69, "Sixty Nine"}, {70, "Seventy "}, {71, "Seventy One "}, {72, "Seventy Two"}, {73, "Seventy Three"}, {74, "Seventy Four"},
{75, "Seventy Five"}, {76, "Seventy Six"}, {77, "Seventy Seven"}, {78, "Seventy Eight"}, {79, "Seventy Nine"},
{80, "Eighty "}, {81, "Eighty One "}, {82, "Eighty Two"}, {83, "Eighty Three"}, {84, "Eighty Four"}, {85, "Eighty Five"},
{86, "Eighty Six"}, {87, "Eighty Seven"}, {88, "Eighty Eight"}, {89, "Eighty Nine"}, {90, "Ninety "}, {91, "Ninety One "},
{92, "Ninety Two"}, {93, "Ninety Three"}, {94, "Ninety Four"}, {95, "Ninety Five"}, {96, "Ninety Six"}, {97, "Ninety Seven"},
{98, "Ninety Eight"}, {99, "Ninety Nine"}}

    Dim i As Integer
    For i = 0 To UBound(wordList)
        If Num = wordList(i, 0) Then
            primWord = wordList(i, 1)
            Exit For
        End If
    Next
    Return primWord
End Function
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    TextBoxWord.Text = ConverttoWord.ConvertNum(TextBoxfigure.Text)
End Sub

结束班

enter code here