将数字转换为单词

在访问对象对话框中,单击“模块”

单击新建以创建新模块

复制以下代码,然后将其粘贴到新模块中:


Function SayNo(ByVal N As Currency) As String 
    Const Thousand = 1000@
    Const Million = Thousand * Thousand
    Const Billion = Thousand * Million
    Const Trillion = Thousand * Billion 
    If (N = 0@) Then SayNo = "zero": Exit Function 
    Dim Buf As String: If (N < 0@) Then Buf = "negative " Else Buf = ""
    Dim Frac As Currency: Frac = Abs(N - Fix(N))
    If (N < 0@ Or Frac <> 0@) Then N = Abs(Fix(N))
    Dim AtLeastOne As Integer: AtLeastOne = N >= 1 
    If (N >= Trillion) Then
        Debug.Print N
        Buf = Buf & SayNoDigitGroup(Int(N / Trillion)) & " trillion"
        N = N - Int(N / Trillion) * Trillion
        If (N >= 1@) Then Buf = Buf & " "
    End If 
    If (N >= Billion) Then
        Debug.Print N
        Buf = Buf & SayNoDigitGroup(Int(N / Billion)) & " billion"
        N = N - Int(N / Billion) * Billion
        If (N >= 1@) Then Buf = Buf & " "
    End If 
    If (N >= Million) Then
        Debug.Print N
        Buf = Buf & SayNoDigitGroup(N \ Million) & " million"
        N = N Mod Million
        If (N >= 1@) Then Buf = Buf & " "
    End If 
    If (N >= Thousand) Then
        Debug.Print N
        Buf = Buf & SayNoDigitGroup(N \ Thousand) & " thousand"
        N = N Mod Thousand
        If (N >= 1@) Then Buf = Buf & " "
    End If 
    If (N >= 1@) Then
        Debug.Print N
        Buf = Buf & SayNoDigitGroup(N)
    End If 
    If (Frac = 0@) Then
        Buf = Buf
    ElseIf (Int(Frac * 100@) = Frac * 100@) Then
        If AtLeastOne Then Buf = Buf & " and "
        Buf = Buf & Format$(Frac * 100@, "00") & "/100"
    Else
        If AtLeastOne Then Buf = Buf & " and "
        Buf = Buf & Format$(Frac * 10000@, "0000") & "/10000"
    End If 
    SayNo = Buf
End Function 
Private Function SayNoDigitGroup(ByVal N As Integer) As String 
    Const Hundred = " hundred"
    Const One = "one"
    Const Two = "two"
    Const Three = "three"
    Const Four = "four"
    Const Five = "five"
    Const Six = "six"
    Const Seven = "seven"
    Const Eight = "eight"
    Const Nine = "nine"
    Dim Buf As String: Buf = ""
    Dim Flag As Integer: Flag = False 
    Select Case (N \ 100)
        Case 0: Buf = "": Flag = False
        Case 1: Buf = One & Hundred: Flag = True
        Case 2: Buf = Two & Hundred: Flag = True
        Case 3: Buf = Three & Hundred: Flag = True
        Case 4: Buf = Four & Hundred: Flag = True
        Case 5: Buf = Five & Hundred: Flag = True
        Case 6: Buf = Six & Hundred: Flag = True
        Case 7: Buf = Seven & Hundred: Flag = True
        Case 8: Buf = Eight & Hundred: Flag = True
        Case 9: Buf = Nine & Hundred: Flag = True
    End Select 
    If (Flag <> False) Then N = N Mod 100
    If (N > 0) Then
        If (Flag <> False) Then Buf = Buf & " "
    Else
        SayNoDigitGroup = Buf
        Exit Function
    End If 
    Select Case (N \ 10)
        Case 0, 1: Flag = False
        Case 2: Buf = Buf & "twenty": Flag = True
        Case 3: Buf = Buf & "thirty": Flag = True
        Case 4: Buf = Buf & "forty": Flag = True
        Case 5: Buf = Buf & "fifty": Flag = True
        Case 6: Buf = Buf & "sixty": Flag = True
        Case 7: Buf = Buf & "seventy": Flag = True
        Case 8: Buf = Buf & "eighty": Flag = True
        Case 9: Buf = Buf & "ninety": Flag = True
    End Select 
    If (Flag <> False) Then N = N Mod 10
    If (N > 0) Then
        If (Flag <> False) Then Buf = Buf & "-"
    Else
        SayNoDigitGroup = Buf
        Exit Function
    End If 
    Select Case (N)
        Case 0:
        Case 1: Buf = Buf & One
        Case 2: Buf = Buf & Two
        Case 3: Buf = Buf & Three
        Case 4: Buf = Buf & Four
        Case 5: Buf = Buf & Five
        Case 6: Buf = Buf & Six
        Case 7: Buf = Buf & Seven
        Case 8: Buf = Buf & Eight
        Case 9: Buf = Buf & Nine
        Case 10: Buf = Buf & "ten"
        Case 11: Buf = Buf & "eleven"
        Case 12: Buf = Buf & "twelve"
        Case 13: Buf = Buf & "thirteen"
        Case 14: Buf = Buf & "fourteen"
        Case 15: Buf = Buf & "fifteen"
        Case 16: Buf = Buf & "sixteen"
        Case 17: Buf = Buf & "seventeen"
        Case 18: Buf = Buf & "eighteen"
        Case 19: Buf = Buf & "nineteen"
    End Select 
    SayNoDigitGroup = Buf 
End Function 
保存该模块并调用它,例如NumbersToWords

现在从您的表单中使用语法调用函数

说不(您的数值)

举个例子(由于我不知道您的技能水平,对不起),这就是我进行测试的方式。 完成上述操作以创建模块后,我运行了一个带有文本框和标签的简单表单; txtTextNumbers和lblTextWords


Private Sub txtTextNumbers_Exit(Cancel As Integer)
     Me.lblTextWords.Caption = SayNo(Me.txtTextNumbers.Value)
End Sub 
输入数据并退出文本框后,标签将包含与输入数字相等的词。

当然,可以在其他事件中使用相同的代码。

我只将作者称为M8KWR。

From: https://bytes.com/topic/access/insights/625202-converting-numbers-words

在C语言中,将数字转换为对应的英文单词通常涉及到库函数或自定义函数实现。一种常见的方法是通过递归函数来处理每一位的转化,并维护适当的词头和单位。这里有一个简化版的示例,展示了如何创建一个基础版本的十进制整数转英文: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 数字到英文单词的对应数组 const char *ones[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; const char *tens[] = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; // 辅助函数用于拼接单个位数的英文单词 char* num_to_word(int num) { if (num == 0) return ones[0]; else if (num < 10) return ones[num]; else if (num < 20) return tens[num / 10] + (num % 10 > 0 ? " " : ""); else { return tens[num / 10 - 2] // 单位(ten, twenty, thirty...) + ((num % 10 == 0) ? "" : "-" + ones[num % 10]); } } // 主函数,将整数转换为英文字符串 void int_to_word(char *result, int number) { int digits[] = {number / 1000, (number % 1000) / 100, (number % 100) / 10, number % 10}; char *word; for (int i = 0; i < sizeof(digits); ++i) { word = num_to_word(digits[i]); if (i != 0) { strcat(result, " "); if (digits[i] >= 2) strcat(result, word); else strcat(result, "hundred"); } else { strcpy(result, word); } } } int main() { int number = 425; char buffer[100]; int_to_word(buffer, number); printf("Number %d in words is: %s\n", number, buffer); return 0; } ``` 这个程序只能处理不超过三位数的整数,实际应用中可能需要更复杂的解决方案来支持更大范围的数字。请注意,这只是一个基本示例,实际项目中可能需要考虑性能优化和错误处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值