我有一个数据文件,其中没有为十进制数指定小数点。数字在数据文件的布局中描述为前两位数为实数,后两位数为十进制,它因不同的字段,实数和小数部分而异
所以实际的数字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
有关如何调整此逻辑以获得所需输出的任何想法,或者根本不可能这样做?
答案 0 :(得分:1)
我很确定您无法使用Round()函数来满足您的需求。看一下FormatNumber()或FormatCurrency()函数,因为它们可以选择“IncludeLeadingZero”。
请查看以下链接中的答案以获取更多信息:
答案 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