Hej hopp hallå! Jag skulle nog ha gjort så här i stället : Här är en funktion som borde fungera perfekt som inte är lika stor som din: TOPPEN!! =o)Öresutjämning.
Något så enkelt (trodde jag innan) som att avrunda ett tal till närmsta 50-öring visade sej inte vara så enkelt.
Jag kom på den här, fungerande, lösningen:
<code>
' Utjämnings regler enligt Svenska Posten.
' 0.00 kr - 0.24 kr = 0.00 kr
' 0.25 kr - 0.74 kr = 0.50 kr
' 0.75 kr - 0.99 kr = 1.00 kr
vValue = 234.23 ' Det tal vi vill utjämna/avrunda.
vOre = Mid(Cstr(vValue),InStr(Cstr(vValue),","),3) ' Plocka ut örena.
vTal = Left(Cstr(vValue),(InStr(Cstr(vValue),",")-1)) ' Plocka ut heltalet.
' Eftersom allt mellan 0.00 kr och 0.24 kr blir 0.00 kr så behöver vi inte
' bry oss om den biten.
If vOre => 0.25 And vOre < 0.75 Then
vAdd = 0.5 ' Örena ska bli 50 öre.
ElseIf vOre => 0.75 Then
vAdd = 1 ' Örena ska bli 1 krona.
End If
vTal = vTal + vAdd ' Addera 50 öre eller 1 kronan till heltalet.
' Formatera värdena som Currency och pressentera dom.
cValue = FormatCurrency(vValue) ' Innan avrundning/utjämning.
cUtj = FormatCurrency(vTal - vValue) ' Hur mycket vi avrundat med. (-/+)
cTal = FormatCurrency(vTal) ' Efter avrundning.
Response.Write("<pre>Initialt tal : " & cValue & "<BR>")
Response.Write("Utjämning : " & cUtj & "<BR>")
Response.Write("Resultat : " & cTal & "</pre>")
</code>
Jag vet inte, men det känns konstigt att behöva göra så här, finns det något enklare sätt?
Thanx!Sv: Öresutjämning.
<code>
vValue = 234.55 ' Det tal vi vill utjämna/avrunda.
vTal = Int(vValue)
vOre = vValue - vTal
If vOre >= 0.25 And vOre < 0.75 Then
vOre = 0.5 ' Örena ska bli 50 öre.
ElseIf vOre >= 0.75 Then
vOre = 1 ' Örena ska bli 1 krona.
Else
vOre = 0
End If
vTal = vTal + vOre
</code>
Även om stränghanteringen fungerar så känns ovanstående mer naturligt eftersom man slipper konvertera fram och tillbaka mellan strängar och tal.Sv: Öresutjämning.
<code>
'anrop;
Response.Write OreUtjamning(24.23) ' ger 24.00
Response.Write OreUtjamning(24.43) ' ger 24.50
Response.Write OreUtjamning(24.83) ' ger 25.00
function OreUtjamning(kr) ' as currency
dim ore 'as double
' Räkna fram antal ören, (kr - heltalsdelen av kr)
ore = kr - clng(kr)
' är det mindre än 25 öre i skillnad, så ska det avrundas neråt
if ore < 0.25 then
OreUtjamning = clng(kr)
' är det 75 öre eller mer i skillnad ska vi avrunda uppåt till närmsta nästa krona
elseif ore >= 0.75 then
OreUtjamning = clng(kr) + 1
' i alla andra fall är det x kronor och femtio öre som gäller
else
OreUtjamning = clng(kr) + .5
endif
end function
</code>
*Edit*
Såg nu att den var likadan som Hultans :-/ men bättre kommenterad :-)Sv: Öresutjämning.
<code>
<%
vValue = 234.75
vUt = Int(2 * vValue + 0.5) / 2
vDiff = vUt - vValue
cValue = FormatCurrency(vValue)
cUt = FormatCurrency(vUt)
cDiff = FormatCurrency(vDiff)
Response.Write("IN : " & cValue & "<BR>" & "UT : " & cUt & "<BR>" & "DIFF : " & cDiff)
%>
</code>