Показывать только три значащие цифры для объема данных - PullRequest
0 голосов
/ 22 января 2020

как я могу показать только три значащие цифры для объема данных, то есть 0, ххх; х, хх; хх, х; ххх; x'xxx et c.

это мой код

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

Выходы: на данный момент я набрал 8,798'54 МБ.

до 8'798 МБ, как мне его получить?

спасибо всем за помощь

1 Ответ

1 голос
/ 22 января 2020

Исходя из вашего предыдущего вопроса ...

Чтобы использовать значащие цифры вместо десятичных знаков:

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.WriteLine(BytesToMegabytes(9225936896)) вывод

8'790

Если вы измените строку Dim significantFigures = 3 на Dim significantFigures = 4, она выдаст

8'798

В зависимости от желаемого округления, вы можете использовать dblAns = Math.Round(dblAns / v, MidpointRounding.AwayFromZero) * v вместо или, возможно, Math.Ceiling вместо Math.Floor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...