Vb.net 仅显示数据量的三个有效数字

Vb.net 仅显示数据量的三个有效数字,vb.net,Vb.net,如何仅显示数据量的三个有效数字,即0,xxx;x、 xx;xx,x;xxx;x'xxx等 这是我的密码 Option Strict On Imports System.Globalization Module Module1 Public Function BytesToMegabytes(Bytes As Long) As String 'This function gives an estimate to two decimal 'places.

如何仅显示数据量的三个有效数字,即0,xxx;x、 xx;xx,x;xxx;x'xxx等

这是我的密码

Option Strict On

Imports System.Globalization

Module Module1

    Public Function BytesToMegabytes(Bytes As Long) As String
        'This function gives an estimate to two decimal
        'places.  For a more precise answer, format to
        'more decimal places or just return dblAns

        Dim dblAns As Double = (Bytes / 1024) / 1024

        Dim ci = New CultureInfo("en-GB")
        ci.NumberFormat.NumberDecimalSeparator = "'"

        Return dblAns.ToString("###,###,##0.00", ci)

    End Function

    Sub Main()

        Console.WriteLine(BytesToMegabytes(9225936896))

        Console.ReadLine()

    End Sub

End Module
产出: 目前我的分数是8798'54MB

要8'798MB,我怎么才能得到它

谢谢大家的帮助

下面是您的

要使用有效数字而不是小数位数,请执行以下操作:

Public Function BytesToMegabytes(bytes As Long) As String
    Dim dblAns As Double = (bytes / 1024) / 1024

    If dblAns = 0 Then
        Return "0"
    End If

    Dim significantFigures = 3
    Dim magnitude = Math.Floor(Math.Log10(dblAns))
    Dim v As Double = 10 ^ (magnitude - significantFigures + 1)
    dblAns = Math.Floor(dblAns / v) * v

    Dim ci = New CultureInfo("")
    ci.NumberFormat.NumberDecimalSeparator = ","
    ci.NumberFormat.NumberGroupSeparator = "'"

    Return dblAns.ToString("#,##0.###", ci)

End Function
例如,Console.WriteLineBytesToMegabytes9225936896输出

8'790

如果将行Dim MANGINTFIGURES=3更改为Dim MANGINTFIGURES=4,则输出

8'798


根据您需要的舍入,您可能希望使用dblAns=Math.RounddblAns/v、MidpointRounding.AwayFromZero*v,或者可能使用Math.天花而不是Math.Floor。

Return dblAns.ToStringN3,ci。@Jimi给我的格式与:Return dblAns.ToString,,0.00,ci您的预期输出是什么?123445568999/1024/1024。顺便说一句,ci打印117726'869,将所有这些额外字符添加到格式说明符是毫无意义的,0.00将具有与您相同的效果。您不需要指定每个组分隔符的确切位置;只是应该使用组分隔符。非常感谢您的回答,我只需要以MB为单位的最终输出,但是从太多的位置,例如9225936896为8'798MB,如何获得它?目前我的分数为8798'54 MB。@Mara问题中的有效数字存在冲突,因此我添加了如何更改它。您是否也希望千分位分隔符为“”?在我看来,这已经更好了,我希望它是一个“千分位分隔符”,如示例中所示:8'798MB@Mara如果您参考我对您之前关于该主题的问题的回答,您将看到我提到您可以设置ci.NumberFormat.NumberGroupSeparator的值。我已经相应地编辑了我的答案,我猜小数点分隔符是逗号,。