求一个通过对字符操作来实现四舍五入的例子

lywei123 2005-03-05 01:30:22
比如:
Dim a As String
Dim b As String

a = "12.3"
b = Asc(Right(a, 1))

If b < 53 Then
Else
.....
End If
...全文
125 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xayzmb 2005-03-07
  • 打赏
  • 举报
回复
Public Function myRound(ByVal sglN As Double, lngW As Long) As Double
On Error GoTo err1
'四舍五入函数
Dim lngN As Long '字符总长
Dim lngD As Long '记录小数点位置
Dim lngC As Long '小数位数
Dim sglX As Double '小数点后lngW-1位以前的数字
Dim lngX2 As Long '保存lngW位的数字(要保留的小数最未位)
Dim lngX3 As Long '保存lngW+1位的数字(要舍去的小数第一位)

'计算小数点位置
lngD = InStr(sglN, ".")
lngN = Len(sglN)

If lngD = 0 Then
myRound = sglN
Else
sglX = Left(sglN, lngD + (lngW - 1))
lngC = Len(Mid(sglN, lngD + 1, Len(sglN) - lngD))
If lngC > lngW Then
lngX2 = Mid(sglN, lngD + lngW, 1)
lngX3 = Mid(sglN, lngD + lngW + 1, 1)
If lngX3 > 4 Then lngX2 = lngX2 + 1

If lngW = 1 Then
myRound = sglX & "." & lngX2
Else
myRound = sglX & lngX2
End If
Else
myRound = sglN
End If
End If

Exit Function
err1:
MsgBox "未知错误!", 48, "myRound:"
End Function
lyj0558 2005-03-07
  • 打赏
  • 举报
回复
参考:
if IsNumeric(Str) then
用Round()四舍五入
else
msgbox "不能四舍五入!"
end if
cdhelang 2005-03-07
  • 打赏
  • 举报
回复
这是实现一个小数四舍五入的功能,看要不要的,要得请加分
'------------------------------------------------------------
' Function :fcRoundValue
' Description :对数值进行四舍五入计算
' Parameters :dblValue--数值,lngDecimal--保留小数位数
' Return :Double--数值
'------------------------------------------------------------
Public Function fcRoundValue(dblValue As Double, lngDecimal As Long) As Double

Dim strTempRemain As String '数值保留部分
Dim lngTempRemain As Long '数值保留部分位数
Dim dblTempRound As Double '数值四舍五入部分
Dim strDecimal As String '小数点位置
Dim strTempValue As String '临时数值变量
Dim dblTempcount As Double '四舍五入的值
Dim lngLoop As Long '循环变量

'转换数值类型
strTempValue = CStr(dblValue)
'小数点位置
strDecimal = InStr(strTempValue, ".")

'如果四舍五入的设定小数位数比实际小数位数要多(实际数值没有小数)
If strDecimal = 0 Then
fcRoundValue = dblValue
Exit Function
'如果四舍五入的设定小数位数比实际小数位数多或者相等(实际数值有小数)
ElseIf (CLng(strDecimal) + lngDecimal) >= Len(strTempValue) Then
fcRoundValue = dblValue
Exit Function
End If

'取得保留位置部分的数据及数据长度
strTempRemain = Left(strTempValue, (CLng(strDecimal) + lngDecimal))
lngTempRemain = Len(strTempRemain)

'取得数据四舍五入部分的值
dblTempRound = gfcConvzero(CDbl(Mid(strTempValue, lngTempRemain + 1, 1)))

'如果需要四舍五入(四舍五入部分数值大于等于5)
If (dblTempRound >= 5) Then
dblTempcount = 1
'计算四舍五入的值
For lngLoop = 1 To lngDecimal
dblTempcount = dblTempcount / 10
Next
'如果是正值或零值
If (dblValue >= 0) Then
'计算最终结果
fcRoundValue = CDbl(strTempRemain) + dblTempcount
'如果是负值
ElseIf (dblValue <= 0) Then
'计算最终结果
fcRoundValue = CDbl(strTempRemain) - dblTempcount
End If
'如果不需要四舍五入(四舍五入部分数值小于5)
ElseIf (dblTempRound < 5) Then
'计算最终结果
fcRoundValue = CDbl(strTempRemain)
End If

Exit Function

End Function
yorbo 2005-03-05
  • 打赏
  • 举报
回复
不知道楼主希望得到什么功能呢?

幻影时空 2005-03-05
  • 打赏
  • 举报
回复
呵呵,我想楼主应该只是争对数字吧.四啥五入只有对数字才有效的...

就如楼上所说的,先用val转为数字,四舍之后,再转回就OK了噢!如果真是字符串,我想就没有必要四舍了吧!
laisiwei 2005-03-05
  • 打赏
  • 举报
回复
先用Val()得到数字

然后用Round()四舍五入

最后用CStr()转回字符
ffs 2005-03-05
  • 打赏
  • 举报
回复
是啊,先将字符串转换为数字,用value()
转换之前最好先判断一下是不是数字的字符串,用isNumeric()
lsftest 2005-03-05
  • 打赏
  • 举报
回复
先转为数值四舍五入后再转回字符串行不行????
Andy__Huang 2005-03-05
  • 打赏
  • 举报
回复
四舍五入只能是對數學運算,要先把它轉換成數字後才再轉換。如果它本身就是“abcdaweraa”之類的字符串,又什麼能談得上是四舍五入呢?
flyingZFX 2005-03-05
  • 打赏
  • 举报
回复
晕,,,

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧