我需要截断我的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