2016-11-23 18 views
0

我把十進制變量湊到4個地方。如何在小數點後的VB.net忽略0值?

Dim a As Decimal = Math.Round(b, 4, MidpointRounding.AwayFromZero) 

如果值是5400.40019,我會得到5400.4002。 但是我不希望0之後的值在小數點後。 例如,當值爲5400.4001時,我只需要5400.4000。如果值是5400.0412,我想要的全部是5400.0000

我該怎麼辦?

+1

你的例子表明,要舍TO1小數位。你能否提供更多的例子來使它更清晰你想要的? – DeanOC

+0

絕對不是。我想要4位小數點。但正如我所說的,我不希望小數點後面的值爲0,例如,如果值是'5400.1205',我想要的是'5400,1200'。但是,如果值是'5400.1234',那就沒有問題,因爲4位小數沒有0。對不起語法。英語不是我的母語。 – taymyinl

+0

謝謝澄清。 – DeanOC

回答

0

嘗試此方法

Public Function CustomFormater(b As Decimal) As Decimal 
    Dim a As Decimal = Math.Round(b, 4, MidpointRounding.AwayFromZero) 
    Dim pre As Int32 = Convert.ToInt32(a.ToString().Split(".")(1)) 
    Dim result As Int32 = If(pre Mod 1000 >= 500, pre + 1000 - pre Mod 1000, pre - pre Mod 1000) 
    Dim output As Decimal = Math.Round(Convert.ToDecimal(a.ToString().Split(".")(0) + "." + result.ToString()), 4, MidpointRounding.AwayFromZero) 
    Return output 
End Function 

,你只需要調用此方法與你輸入十進制值。

例如

Dim b As Decimal = 5400.40019 
MessageBox.Show("done" + CustomFormater(b).ToString()) 
+0

問題解決了。謝謝,bro +1 – taymyinl

+0

WC,請將此標記爲答案.... –

+0

@taymyinl就像fyi一樣,你不應該添加基本上只是說「謝謝」或「+1」的評論。正確回答一個有用的答案是upvote每個有用的答案。 – DeanOC

1

我不確定沒有字符串操作就可以實現。這應該給你你正在尋找的結果。它將小數點四捨五入到小數點後四位,將其轉換爲一個字符串,然後迭代搜索小數點的字符串的每個字符,然後迭代小數點後的第一個零。

Dim b As Decimal = 5400.40019D 
    Dim a As Decimal = Math.Round(b, 4, MidpointRounding.AwayFromZero) 
    Dim s As String = a.ToString 
    Dim s2 As String = "" 
    Dim bDecimalPointFound As Boolean 
    Dim bZeroFound As Boolean 

    For i As Int32 = 0 To s.Length - 1 
     Dim sChar As String = s.Substring(i, 1) 

     If bDecimalPointFound = True Then 
      If sChar = "0" Then bZeroFound = True 
      s2 &= If(bZeroFound = True, "0", sChar) 
     Else 
      s2 &= sChar 
      bDecimalPointFound = (sChar = ".") 
     End If 
    Next 

    Dim c As Decimal = Convert.ToDecimal(s2) 
+1

問題解決了。謝謝,兄弟+1 – taymyinl