自定义舍入中的逻辑 - VB脚本 - QTP

时间:2014-01-16 22:32:42

标签: vbscript logic qtp rounding

我有一个数据文件,其中没有为十进制数指定小数点。数字在数据文件的布局中描述为前两位数为实数,后两位数为十进制,它因不同的字段,实数和小数部分而异

所以实际的数字12345.6789被指定为123456789.当我希望将它四舍五入到2个小数点以匹配应用程序中的值时,我使用下面的逻辑

Public Function Rounding(NumberValue, DecimalPoints, RoundOff)

        Rounder= Roundoff+1
    Difference = DecimalPoints - Rounder
    NumberValue = Mid(NumberValue, 1, Len(NumberValue)-Difference)

    RealNumber=Mid(NumberValue,1,Len(NumberValue)-Rounder)
    DecimalNumber=Right(NumberValue,Rounder)

    NumberValue = RealNumber&"."&DecimalNumber
    NumberValue = Cdbl(NumberValue)
    NumberValue = Round(NumberValue, Roundoff)
    Rounding = FormatNumber(NumberValue,Difference+1,,,0)

End Function

然而,这个逻辑的问题是,当数字为0作为十进制值时,我无法舍入小数

对于一个例子,让我们将12345.0000(我想要四舍五入到2位小数点)

我的函数将其返回为12345,而我希望将其返回为12345.00

有关如何调整此逻辑以获得所需输出的任何想法,或者根本不可能这样做?

2 个答案:

答案 0 :(得分:1)

我很确定您无法使用Round()函数来满足您的需求。看一下FormatNumber()或FormatCurrency()函数,因为它们可以选择“IncludeLeadingZero”。

请查看以下链接中的答案以获取更多信息:

vbscript round to 2 decimal places using Ccur

答案 1 :(得分:1)

要获取小数位,请使用Formatnumber功能。请参阅http://msdn.microsoft.com/en-us/library/ws343esk(v=vs.84).aspx - 默认值通常为2位小数,但在使用默认值时是特定的区域设置。

如果decimalpoints变量与roundoff变量匹配,那么您的脚本也有一个小问题 - 它不会填充Rounding结果。我也不确定你为什么要将DecimalPoints与Roundoff(-1)进行比较?

我修改了整个例行程序 - 它应该做你想做的事情(虽然我不知道你在喂它的是什么价值) - 所以现在它会像这样工作:


做4位数:

  

舍入(123450001,4,2)

结果:

  

12345.00


做两位数:

  

舍入(123450001,2,2)

结果:

  

1234500.01


做4位数(如果> .5增加)

  

舍入(876512345678,8,4)

结果:

  

8765.1235

修改简化功能,应该做你要问的一切:

Public Function Rounding(NumberValue, DecimalPoints, RoundOff )

    RealNumber = Mid(NumberValue, 1, Len(NumberValue)-DecimalPoints)
    DecimalNumber = Round("." & Right(NumberValue,DecimalPoints), RoundOff)
    Rounding = FormatNumber(RealNumber + DecimalNumber,RoundOff,,,0)

End Function

以下是您的功能的工作版本:

Public Function Rounding(NumberValue, DecimalPoints, RoundOff)

    RealNumber=left(NumberValue,Len(NumberValue)-DecimalPoints)
    DecimalNumber="." & Right(NumberValue,DecimalPoints)
    NumberValue = RealNumber + DecimalNumber
    NumberValue = Round(NumberValue,RoundOff)
    Rounding = FormatNumber(NumberValue, RoundOff,,,0)

End Function