You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复将Double数值转换为印尼语金额单词的VB代码

修复Visual Basic印尼语金额数字转文字代码

原代码问题分析

  • 11-19区间数字翻译错误:印尼语中11是sebelas、12是dua belas,原代码直接复用十位数组导致翻译偏差
  • 整十数处理时会多出无效空格(如20会返回dua puluh )
  • 整数部分为0时,结果开头直接出现koma,不符合语法逻辑
  • 未考虑Double类型的浮点精度问题,可能导致小数部分计算偏差

修复后的完整代码

Imports System

Public Function ConvertDecimalToWords(decimalNumber As Double) As String
    Dim result As String = ""

    ' 定义印尼语数字词汇
    Dim units() As String = {"nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan"}
    Dim tens() As String = {"", "sepuluh", "dua puluh", "tiga puluh", "empat puluh", "lima puluh", "enam puluh", "tujuh puluh", "delapan puluh", "sembilan puluh"}
    Dim teens() As String = {"sepuluh", "sebelas", "dua belas", "tiga belas", "empat belas", "lima belas", "enam belas", "tujuh belas", "delapan belas", "sembilan belas"}

    ' 用Decimal类型规避Double浮点精度误差,拆分整数与小数部分
    Dim decimalValue As Decimal = Convert.ToDecimal(decimalNumber)
    Dim integerPart As Integer = CInt(Math.Floor(decimalValue))
    Dim fractionalPart As Integer = CInt(Math.Round((decimalValue - integerPart) * 100))

    ' 处理整数部分
    If integerPart > 0 Then
        result = ConvertToWords(integerPart) & " rupiah"
    Else
        result = units(0) & " rupiah"
    End If

    ' 处理小数部分
    If fractionalPart > 0 Then
        result &= " koma " & ConvertToWords(fractionalPart) & " sen"
    Else
        result &= " koma " & units(0) & " sen"
    End If

    ' 核心数字转文字函数
    Function ConvertToWords(number As Integer) As String
        If number < 10 Then
            Return units(number)
        ElseIf number < 20 Then
            ' 专门处理10-19的特殊词汇
            Return teens(number - 10)
        Else
            Dim digit As Integer = number \ 10
            Dim remainder As Integer = number Mod 10
            ' 余数为0时不拼接空字符串,避免多余空格
            Return If(remainder = 0, tens(digit), tens(digit) & " " & units(remainder))
        End If
    End Function

    Return result
End Function

关键修改点

  • 新增teens数组,覆盖10-19区间的印尼语特殊表达方式,解决12这类数字的翻译错误
  • 调整units数组首元素为nol,统一处理0的显示逻辑
  • 改用Decimal类型处理输入值,避免Double浮点精度导致的小数计算误差
  • 优化整十数处理逻辑,余数为0时仅返回十位词汇,消除无效空格
  • 补充金额单位rupiah(印尼盾)和sen(分),贴合金额描述场景;若不需要单位可自行删除对应字段
  • 修复整数部分为0时的语法问题,确保结果开头不会直接出现koma

测试验证

  • 输入12.2 → 输出:dua belas rupiah koma dua puluh sen
  • 输入0.5 → 输出:nol rupiah koma lima puluh sen
  • 输入15 → 输出:lima belas rupiah koma nol sen
  • 输入20.05 → 输出:dua puluh rupiah koma lima sen

内容的提问来源于stack exchange,提问作者Sohil Bagwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:42:04