Delen door Null

Status
Niet open voor verdere reacties.
Mag hij in 2003 format??
 
Alsjeblieft,

Normaal wordt er bij uurtarief een berekening gedaan: prijs / uren = uurprijs.
Dit werkt perfect!

Als er bij uren een 0 staat of een 0 komagetal... moet hij delen door 1 anders gewoon door uren.
hij mag wel de 0 of 0 komagetal laten zien bij uren.
 

Bijlagen

Laatst bewerkt:
En hoe simpel de dingen kunnen zijn:

Code:
Private Sub uren_AfterUpdate()
    
    If Val(Me.uren.Value) = 0 Then Me.uren.Value = 1
    Call rekensom(Me)

End Sub
Zoals ik al zei, waarom gebruik je niet gewoon een IF? :)
 
Het kan nog netter:

Code:
Private Sub uren_AfterUpdate()
    If Val(Nz(Me.uren.Value, 0)) = 0 Then Me.uren.Value = 1
    Call rekensom(Me)
End Sub
Code:
Private Sub uurprijs_Click()
    If Val(Nz(Me.uren.Value, 0)) = 0 Then Me.uren.Value = 1
    Call rekensom(Me)
End Sub
Code:
Public Function rekensom(bvt3 As Form)
    bvt3.[uurprijs] = CDbl(bvt3.[budget]) / Nz(bvt3.[uren], 1)
End Function
In dit geval gebruik ik in de formule bvt3.[uurprijs] = CDbl(bvt3.[budget]) / Nz(bvt3.[uren], 1) de NZ functie om het veld Uren op de waarde Null te checken. Normaal gesproken wil je de waarde dan als het getal Nul teruglezen (immers: hij is leeg) maar dan krijg je een deling door Nul, wat uiteraard niet kan. Dus vervang je Null nu door het getal 1; probleem opgelost...
 
maar dan krijg je een deling door Nul, wat uiteraard niet kan. Dus vervang je Null nu door het getal 1; probleem opgelost...

Juist Michel.

Delen door nul is een rekenkundige bewerking die niet toegestaan is in de wiskunde. Het gaat om een deling waarvan de deler het getal nul is. De bewerking is niet geoorloofd, omdat de inverse van het getal 0 niet bestaat als reëel getal of complex getal. Bij het gewone rekenen kan daarom geen zinnige betekenis gegeven worden aan het resultaat van een deling door nul.
In de wiskunde is het in bepaalde gevallen met limieten of andere getalstelsels mogelijk een zinvolle betekenis aan deling door nul te geven.

:cool:
 
Klopt allemaal werkt allemaal netjes!!

Zelf heb ik veel gewone If functies in mijn database, alleen ik dacht deze juist met Iif moest.

Maar.. het klopt nu dat hij bij 0, 1 bereken... eens.
Echter hij moet die 0 niet in 1 veranderen in het veld uren, alleen 1 gebruiken bij de berekening.

Ik weet niet of dit mogelijk is...
 
Daarvoor gebruik je alleen de functie met de aangepaste Nz.
Ik heb het veld Uren met 1 gevuld voor het gemak. Mag je dus weglaten...
 
Hoi ik heb hem aangepast en gebruik nu alleen de laatste (dus enkel de function NZ.
Echter als ik geen waarde in heb gevuld bij uren (Null) deelt hij ook netjes door 1, dit is geen punt. Maar als ik deze weg haal is dit niet de oplossing.

U beschrijft dat ik de 1 weg kan halen, alleen dan krijg ik Fout 11 delen door Nul.

Code:
Private Sub uren_AfterUpdate()
'    If Val(Nz(Me.uren.Value, 0)) = 0 Then Me.uren.Value = 1
    Call rekensom(Me)
End Sub

Private Sub uurprijs_Click()
'    If Val(Nz(Me.uren.Value, 0)) = 0 Then Me.uren.Value = 1
    Call rekensom(Me)
End Sub


Public Function rekensom(bvt3 As Form)
    bvt3.[uurprijs] = CDbl(bvt3.[budget]) / Nz(bvt3.[uren])
End Function
 
Wat heb je weggehaald? wat ik bedoelde is dit:

Code:
Private Sub uurprijs_Click()
    Call Rekensom(Me)
End Sub
Code:
Public Function Rekensom(bvt3 As Form)
    bvt3.[uurprijs] = CDbl(bvt3.[budget]) / Nz(bvt3.[uren], 1)
End Function
Dus de Rekensom functie gebruiken voor de berekening, met vervangen van de Nullwaarde door 1, en het tekstvak verder leeg laten als er niks is ingevuld.
 
Hoi Octafish,

Precies zoals u aangeeft, omdat ik begreep uit vorige posten (waar je eerder dit voorbeeld gaf) dat ik deze moest gebruiken alleen dan zonder de 1.
Maar zoals bovenstaande werkt het netjes als er geen waarde is bij uren, dus null.

Maar bij uren lager dan 1 (0 t/m 0.9) moet dit getal bij uren blijven staan, maar moet hij bij de rekensom 1 gebruiken (met andere woorden uren is gelijk een budget).

Ik ga nog even proberen...
 
Laatst bewerkt:
Beste,

Ik heb nu de volgende code alleen Function Rekensom werkt nog niet...

Code:
Public Function Rekensom(bvt3 As Form)
    bvt4.[uurprijs] = CDbl(bvt4.[budget])
End Function

Public Function Rekensom2(bvt4 As Form)
    bvt4.[uurprijs] = CDbl(bvt4.[budget]) / Nz(bvt4.[uren], 1)
End Function

Private Sub uurprijs_Click()
    If [uurprijs] < "1" Then
      Call Rekensom(Me)
    Else
      Call Rekensom2(Me)
    End If
End Sub
 

Bijlagen

Laatst bewerkt:
Da's wel logisch:

Public Function Rekensom(bvt3 As Form)
bvt4.[uurprijs] = CDbl(bvt4.[budget])
End Function
 
Eens, niet logisch....

Maar nog als ik dit verander en budget is € 1.00 uren is 0.9 dan is de uitkomst niet € 1.00 maar € 1.11 het werkt toch nog niet zoals het moet..
 
Met deze functie heb ik geen problemen:

Code:
Public Function Rekensom2(bvt4 As Form)
    If bvt4.[uren] < 1 Then
        bvt4.[uurprijs] = CDbl(bvt4.[budget])
    Else
        bvt4.[uurprijs] = CDbl(bvt4.[budget]) / Nz(bvt4.[uren], 1)
    End If

End Function
 
Precies,

Nu werkt hij wel... de if kan in inderdaad beter in de function verwerken en niet in de gebeurtenis.

Mijn dank is groot :cool:.

Voor de andere lezers hier nog een correct bestandje met de oplossing.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan