??关于进位的
在SQL中:
Ceiling(0.00) = 0
Ceiling(0.10) = 1
Ceiling(0.20) = 1
Ceiling(0.30) = 1
Ceiling(0.40) = 1
Ceiling(0.50) = 1
Ceiling(0.60) = 1
Ceiling(0.70) = 1
Ceiling(0.80) = 1
Ceiling(0.90) = 1
Ceiling(1.00) = 1
Ceiling(1.10) = 2
那我在程序中该如何做到以上的效果呢,有没有象上面进位的函数。
问题点数:100、回复次数:10Top
1 楼sdrcxzy(大向)回复于 2005-08-01 15:04:26 得分 0
好像没有一个这样的函数是往大数进位。
这样可以吗?
i=-fix(-i)+1Top
2 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-08-01 15:09:09 得分 0
Public Function test(ByVal inputVal As Single) As Long
If Fix(inputVal) <> inputVal Then
test = Fix(inputVal) + 1
Else
test = inputVal
End If
End FunctionTop
3 楼sdrcxzy(大向)回复于 2005-08-01 15:09:30 得分 0
不对,1.00不行。Top
4 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-08-01 15:10:15 得分 0
测试代码:
Dim i As Double
For i = 1.1 To 3 Step 0.1
Debug.Print "test(" & i & ")=" & test(i)
Next
输出结果:
test(1.1)=2
test(1.2)=2
test(1.3)=2
test(1.4)=2
test(1.5)=2
test(1.6)=2
test(1.7)=2
test(1.8)=2
test(1.9)=2
test(2)=2
test(2.1)=3
test(2.2)=3
test(2.3)=3
test(2.4)=3
test(2.5)=3
test(2.6)=3
test(2.7)=3
test(2.8)=3
test(2.9)=3
Top
5 楼sdrcxzy(大向)回复于 2005-08-01 15:11:07 得分 0
说错了,楼上的不好意思。Top
6 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-08-01 15:16:08 得分 0
这样就赚100分,有点不好意思,呵呵Top
7 楼WallesCai(女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼)回复于 2005-08-01 15:44:11 得分 0
简单哦:
写个函数:
FUNCTION OO(BYVAL II AS SINGLE) AS LONG
OO=(II+0.99999999999999999)
END FUNCTION
测试:
Dim I As Single
For I = 0.1 To 4 Step 0.1
Debug.Print OO(I)
Next
结果:
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
只要让0.999...的精确度比你的输入多一位就够。
Top
8 楼WallesCai(女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼)回复于 2005-08-01 15:45:04 得分 0
好像偶的代码最简单,也准确吧,哈哈,别和我抢分啦,我都好久没答题了。Top
9 楼crycoming(瞎编)回复于 2005-08-01 15:51:11 得分 0
我也凑热闹
Function DoIt(a As Double) As Long
Dim d As Double
d = a - CLng(a)
If d > 0 Then
DoIt = CLng(a) + 1
Else
DoIt = CLng(a)
End If
End Function
Top
10 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-08-01 16:28:38 得分 0
WallesCai,你的边界没有处理好哦
用你的函数处理0.00看看,得到的结果是1哦,处理1.00得到结果为2,不符合要求!
呵呵Top




