vb.net 保留有效位数 有效数字

找了好长时间,找不到,自己动手写一段代码吧!

保留有效数字,并非在小数点后圆整到多少位。
有效数字是从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字。
就是一个数从左边第一个不为0的数字数起到末尾数字为止,所有的数字(包括0,科学计数法不计10的N次方),称为有效数字。
简单的说,把一个数字前面的0都去掉,从第一个正整数到精确的数位止所有的都是有效数字了。
如:0.0109,前面两个0不是有效数字,后面的109均为有效数字(注意,中间的0也算)。
3.10910^5(3.109乘以10的5次方)中,3 1 0 9均为有效数字,后面的10的5次方不是有效数字。
5.2
10^6,只有5和2是有效数字。
0.0230,前面的两个0不是有效数字,后面的230均为有效数字(后面的0也算)。
1.20 有3个有效数字。
1100.120 有7位有效数字。
2.998*104(2.998乘以10的4次方)中,保留3个有效数字为3.00*104。

 '***获取有效位数的有效数字***
    Public Function funSignifNumber(ByVal Num As Decimal, ByVal n As Integer) As String
        Dim sign As Int16 = Math.Sign(Num) '取得并保存数值的符号
        Dim strSign As String = ""
        If sign = -1 Then strSign = "-"
        Dim mNum As Decimal = Math.Abs(Num)
        Dim intPart As Int64 = Decimal.Truncate(mNum) '获取数值整数部分
        Dim intLen As Integer = intPart.ToString.Length
        Dim fracPart As Decimal = mNum - intPart '获取数值小数部分
        Dim returnNum As String = ""
        If n = 0 Then Return "0"
        If mNum = 0 Then Return ("0." & repeatString("0", n))
        Dim strFrac As String = ""
        If intLen >= n And intPart <> 0 Then
            returnNum = Math.Round(mNum / 10 ^ (intLen - n), 0, MidpointRounding.AwayFromZero).ToString
            returnNum &= repeatString("0", intLen - n)
        ElseIf intPart > 0 Then
            Dim len = n - intLen
            If fracPart = 0 Then
                strFrac = repeatString("0", len)
            Else
                strFrac = Math.Round(fracPart, len, MidpointRounding.AwayFromZero).ToString
                strFrac = strFrac.Remove(0, 2) '去掉“0.”
                If strFrac.Length < len Then strFrac &= repeatString("0", len - strFrac.Length)
            End If
            returnNum = intPart & "." & strFrac
        Else
            Dim surplus As String = fracPart.ToString
            surplus = surplus.Remove(0, 2) '去掉“0.”
            Do Until surplus(0) <> "0"
                strFrac &= "0"
                surplus = surplus.Remove(0, 1)
            Loop
            If surplus.Length < n Then
                surplus = surplus & repeatString("0", n - surplus.Length)
            End If
            surplus = surplus.Insert(n, ".")
            surplus = Math.Round(CDec(surplus), 0, MidpointRounding.AwayFromZero)
            returnNum = "0." & strFrac & surplus
        End If
        Return strSign & returnNum
    End Function
Private Function repeatString(ByVal str As String, ByVal times As Integer) As String
        Dim result As String = ""
        For i As Integer = 1 To times
            result &= str
        Next
        Return result
    End Function
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值