what is wrong with my fun ,thanks

  • Thread starter Thread starter EXCEL$B!!(BNEWS
  • Start date Start date
E

EXCEL$B!!(BNEWS

hi,help me please,

what is wrong with my fun ,thanks
--------------------------------------------------------
Function Length024Round(l As Double) As Double
Dim seisuu As Double
Dim hasu As Double
Dim hasu1 As Double
seisuu = Fix(l)
MsgBox seisuu
hasu = l - seisuu
MsgBox hasu
If hasu < 0.24 Or hasu = 0.24 Then
hasu1 = 0
ElseIf hasu > 0.24 And hasu < 0.74 Then
hasu1 = 0.5
ElseIf hasu = 0.74 Then
hasu1 = 0.5
ElseIf hasu > 0.74 Then
MsgBox "hasu" & hasu
hasu1 = 1
End If
MsgBox hasu1
Length024Round = seisuu + hasu1
End Function '


Sub Length024RoundTest()
Debug.Print Length024Round(0.74)----0.5--ok
Debug.Print Length024Round(2.74))----3.0--why$B!!(Bnot$B!!(B2.5,why 0.74>0.74
End Sub
 
EXCEL NEWS,

First, how is this not working? It works for me.......although I don't know
what the expected results should be. Are there errors? Are the results
wrong? Please provide values, expected results, and the incorrect results
you are recieving.

Second, this code consolidates things a little (notice I commented out your
code and replaced it with less code that will accomplish the same thing):

Function Length024Round(l As Double) As Double
Dim seisuu As Double
Dim hasu As Double
Dim hasu1 As Double
seisuu = Fix(l)
MsgBox seisuu
hasu = l - seisuu
MsgBox hasu
'If hasu < 0.24 Or hasu = 0.24 Then
If hasu <= 0.24 Then
hasu1 = 0
'ElseIf hasu > 0.24 And hasu < 0.74 Then
ElseIf hasu > 0.24 And hasu <= 0.74 Then
hasu1 = 0.5
'ElseIf hasu = 0.74 Then
'hasu1 = 0.5
ElseIf hasu > 0.74 Then
MsgBox "hasu" & hasu
hasu1 = 1
End If
MsgBox hasu1
Length024Round = seisuu + hasu1
End Function



HTH,

Conan
 
Sub Length024RoundTest()
Debug.Print Length024Round(0.74) ----0.5--ok
Debug.Print Length024Round(2.74))----3.0--why$B!!(Bnot$B!!(B2.5,why 0.74>0.74
End Sub

Because of the vagaries of binary computer representation.
Specifically, 0.74 is represented by exactly
0.7399999999999999911182158029987476766109466552734375, where the
fractional part of 2.74 ("hasu") is represented by exactly
0.7400000000000002131628207280300557613372802734375.

You might be happier with the following logic (although I would
replace MsgBox with Debug.Print):

If Round(hasu,2) <= 0.24 Then
hasu1 = 0
ElseIf Round(hasu,2) <= 0.74 Then
hasu1 = 0.5
Else
MsgBox "hasu " & hasu
hasu1 = 1
End If

Note: For the future, be sure to cut-and-paste. There is an obvious
compilation error in what you posted above.

HTH.


----- original posting -----
 
Back
Top