首页 > 解决方案 > 将字节转换为兆字节时的 NaN 结果

问题描述

如何修复将字节转换为兆字节的方法而不是作为结果 NaN。这是我的方法:

   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 = 4
        Dim magnitude = Math.Floor(Math.Log10(dblAns)) 'In this Line I get the NaN
        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

随着Dim usedInklData = BytesToMegabytes(-3271356861) 我得到正确的结果。
我得到Dim usedInklData = BytesToMegabytes(-776150324) 了 NaN 值。

请建议我如何纠正这个问题。

感谢大家的帮助。

标签: vb.net

解决方案


您如何记住您的输入是否为负数,如果是负数,则在以正数进行计算后翻转结果:

Public Function BytesToMegabytes(bytes As Long) As String
    Dim isNeg = bytes < 0
    If isNeg Then bytes *= -1

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

    If dblAns = 0 Then
        Return "0"
    End If

    Dim significantFigures = 4
    Dim magnitude = Math.Floor(Math.Log10(dblAns)) 'In this Line I get the NaN
    Dim v As Double = 10 ^ (magnitude - significantFigures + 1)
    dblAns = Math.Floor(dblAns / v) * v

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

    If isNeg Then dblAns *= -1

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

End Function

推荐阅读