7

我有一个 Visual Basic 应用程序需要向下舍入一个数字,例如,2.556 将变为 2.55 而不是 2.26。

我可以使用一个函数来做到这一点,使用这个函数从小数点开始去除超过 2 个字符:

Dim TheString As String
TheString = 2.556
Dim thelength = Len(TheString)
Dim thedecimal = InStr(TheString, ".", CompareMethod.Text)
Dim Characters = thelength - (thelength - thedecimal - 2)
_2DPRoundedDown = Left(TheString, Characters)

有没有更好的功能来做到这一点?

4

5 回答 5

12

你可以用Math.Floor做到这一点。但是,您需要将 * 100 相乘并除以,因为您无法提供多个数字

Dim theNumber as Double
theNumber = 2.556
Dim theRounded = Math.Sign(theNumber) * Math.Floor(Math.Abs(theNumber) * 100) / 100.0
于 2009-08-04T16:22:45.560 回答
3

另一种不依赖于使用 String 类型的方法:

Dim numberToRound As Decimal
Dim truncatedResult As Decimal
numberToRound = 2.556
truncatedResult = (Fix(numberToRound*100))/100
于 2009-08-04T16:26:40.187 回答
2

Math.Floor( ) 的答案很好。我不确定 Fix() 是在哪个 VB 环境中定义的。正如 Justin 指出的,Math.Floor() 不适用于负数。您必须取绝对值,然后乘以数字的 SGN( )。我不知道您用来获取数字的 SiGN(不是 sin() )的函数的确切名称。

在伪代码中,考虑到负值,结果如下所示:

result = sgn( num ) * floor( abs( num * RoundToDig ) ) / RoundToDig

-- 毛茸茸的奶牛哞哞和解压。

于 2009-08-04T16:45:10.460 回答
1

四舍五入

Math.Floor(number)

修剪字符

number.Substring(0,1)

您可以将其转换为字符串。

于 2013-06-06T17:16:55.937 回答
1
Dim Input As Decimal
Dim Output As Decimal
Input = 2.556
Output = Input - (Input Mod 0.01)

这适用于正数和负数

于 2016-08-08T23:49:42.737 回答