【问题标题】:VB.net: How to format money/numbers?VB.net:如何格式化货币/数字?
【发布时间】:2015-07-05 13:55:19
【问题描述】:

我不知道如何想出格式化数字的代码。

Example:

Input into textbox : 1000
Result in textbox2: 1k

Example:

Input into textbox : 1000000
Result in textbox2: 1m

Example:

Input into textbox : 1000000000
Result in textbox2: 1b

Example:

Input into textbox : 2147483647
Result in textbox2: 2.147483647b
Example:

Input into textbox : 583967
Result in textbox2: 583.967k

我该怎么做?请帮忙!!

【问题讨论】:

  • 阅读和使用Custom Numeric Format。尝试使用组分隔符
  • @Fabio,这是行不通的,因为请求的格式不是 .NET 数字格式可以处理的。
  • VB 中没有任何内置功能可以为您做到这一点。你将不得不使用一些数学和逻辑。如果您使用笔和纸,您将完全按照您的方式进行操作。您首先要除以 1000,然后测试余数是否为 1000 或更多。如果不是,那么您输出带有“k”后缀的数字。如果是,那么你再次划分,依此类推。拿起笔和纸,写下您需要手动执行的步骤,然后编写代码来实现这些步骤。
  • @jmcilhinney,Custom Numeric Format 是可能的,这就是为什么我添加尝试玩...String.Format("{0:0,.###'k'}", yournumber)。当然他需要使用自己的方法来决定使用多少伸缩组

标签: wpf vb.net formatting currency


【解决方案1】:

这可以通过条件算术分组来实现

Imports System

Public Module Module1
    Public Sub Main()
        Dim Input As ULong
        Console.Write("Enter a number: ")
        Input = Convert.ToUInt64(Console.ReadLine())
        Console.WriteLine(FormatNumber(Input))
    End Sub

    Public Function FormatNumber(ByVal Input As ULong) As String
        Dim Result As String = Input.ToString()

        If Input >= 1000000000
            Result = String.Format("{0}b", Input / 1000000000) 
        Else If Input >= 1000000
            Result = String.Format("{0}m", Input / 1000000)
        Else If Input > 1000
            Result = String.Format("{0}k", Input / 1000)
        End If

        Return Result
    End Function
End Module

结果:

Enter a number: 123000000000
123b

Demo

【讨论】:

  • 嗨 shar1er80,这是我一直在寻找的,但有没有办法让最大整数更高?喜欢 10b 但不停留在 2147483647?谢谢!
  • @pleasega 取决于你想去多高,但我已经更新了我的答案以支持高达 18,446,744,073,709,551,615 的数字。如果您想拥有支持万亿、千万亿和 quintillion 的格式,您将不得不添加更多 if 条件。
【解决方案2】:

.NET 没有数字组的文字常量。
但是您可以使用Custom Numeric Format 的数字缩放并将您的角色添加到自定义格式

Private Function GetMyFormat(value As Int64) As String
    Select Case Math.Abs(value)
        Case Is < 1000000
            Return "0,.############'k'"
        Case Is < 1000000000
            Return "0,,.############'m'"
        Case Else
            Return "0,,,.############'b'"
    End Select
End Function

然后配合.ToString方法使用

Dim number As Int64 = 109106
Dim format As String = Me.GetMyFormat(number)
Me.TextBox2.Text = number.ToString(format)

或者创建扩展方法

<Extension>
Public Function ToStringWithMyFormat(this As Int64)
    Dim format As String = "0,,,.############'b'"
    Select Case Math.Abs(this)
        Case Is < 1000000
            format = "0,.############'k'"
        Case Is < 1000000000
            format = "0,,.############'m'"
    End Select        
    return this.ToString(format)
End Function

并使用它:

Dim number As Int64 = 109106
Me.TextBox2.Text = number.ToStringWithMyFormat()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2017-03-23
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多