我需要截斷我的double值的小數位數以顯示在文本框中。如何用vba實現這一點?在excel中用VBA截斷雙精度值
8
A
回答
7
您可以在VBA
使用ROUND
爲FORMAT
例如顯示2位小數
Dval = 1.56789
Debug.Print Round(dVal,2)
Debug.Print Format(dVal,"0.00")
注意:上述會給你1.57
。所以,如果你正在尋找1.56
,那麼你可以存儲DVAL在一個字符串,如果你想一輪的價值,那麼你可以使用函數ROUND(但要注意,VBA當時做這個
Dim strVal As String
dVal = 1.56789
strVal = dVal
If InStr(1, strVal, ".") Then
Debug.Print Split(strVal, ".")(0) & "." & Left(Split(strVal, ".")(1), 2)
Else
Debug.Print dVal
End If
6
Round函數使用Banker的四捨五入法,也稱爲「循環」,它將向上或向下舍入五舍五入;使用傳統舍入舍入,使用格式)。
如果你想截斷沒有四捨五入的值,那麼就沒有必要使用字符串作爲公認的答案 - 只是用數學:
Dim lDecimalPlaces As Long: lDecimalPlaces = 2
Dim dblValue As Double: dblValue = 2.345
Dim lScale = 10^lDecimalPlaces
Dim dblTruncated As Double: dblTruncated = Fix(dblValue * lScale)/lScale
這就產生了「2.34」。
4
您可以使用Int()函數。 Debug.print Int(1.99543)
或更好:
Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
Trunc = Int(value * (10^num))/(10^num)
End Function
所以,你可以使用Trunc(1.99543, 4)
==>result: 1.9954
0
那麼有趣的故事。我正在搞一個快速的VB轉換功能。我只是想將一個double截斷成一個整數。
value = Int(83.768)
value == 83
真棒,在VB實際工作的東西。
哎呀,我忘記了它不會與負數
value = Int(-83.768)
value == -84
工作...是的,這只是發生了。 VB使用銀行家舍入。
Public Function Trunc(ByVal value As Double) As Integer
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Trunc = (Abs(value)/value) * Int(Abs(value))
End Function
如果你想具體小數做什麼Makah與各地值ABS只有這樣做了詮釋可以正常截斷。
Public Function Trunc2(ByVal value As Double, Optional ByVal num As Integer = 1) As Double
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Dim sign As Integer
sign = Abs(value)/value
Trunc2 = sign * (Int(Abs(value) * (10^num))/(10^num))
End Function
相關問題
- 1. 截斷雙精度到2位小數?
- 2. 數據類型雙截斷精度
- 3. netezza雙精度輸出截斷Vaules
- 4. VBA Excel中每個循環的雙精度值
- 5. Laravel Eloquent截斷數據類型double雙精度值
- 6. Excel VBA意外截斷
- 7. 在最高性能下將雙精度向量截斷爲單精度
- 8. 雙精度值
- 9. SqlDataAdapter.Update截斷雙精度返回sql表中
- 10. 錯誤的VBA使用雙精度溢出(Excel)
- 11. oracle在使用精度保存id後截斷值?
- 12. .NET:雙精度值
- 13. TryParse雙精度值
- 14. Python中的雙精度值
- 15. Excel VBA Excel十進制精度
- 16. 在LocationListener中設置雙精度值
- 17. 是否activerecord截斷時間戳精度?
- 18. 在java中具有特定精度的雙精度值
- 19. 在SQLite中存儲雙精度值:如何確保精度?
- 20. 雙比較VBA精度問題
- 21. 雙精度浮點值傳遞雙精度時
- 22. 錯精度雙重價值
- 23. 雙精度值返回0
- 24. J2ME雙精度值問題
- 25. 增加雙精度值
- 26. 截斷雙精度或在小數點加上額外的0 - Java
- 27. 單精度和雙精度
- 28. 雙精度10點精度
- 29. 司在雙精度
- 30. 在JAVA雙精度
修復功能對我的情況非常有幫助! – carlossierra 2016-08-04 22:43:07
我忘記了銀行家的四捨五入。 +1儘管居高臨下「只用數學」刺拳。爲了只顯示OP請求的數字,如果你不太關心舍入,Format()是作業的工具,並且比Fix()(或Int()更簡單,相當於Fix()對於正數)。但是,有些情況下,銀行家的四捨五入會引起用戶疑問並需要更復雜的轉換。 – GlennFromIowa 2017-02-10 00:10:15