Price fraction: Difference between revisions
Content added Content deleted
m (→{{header|RPL}}: Section layout) |
m (Grouping BASIC dialects) |
||
Line 933: | Line 933: | ||
=={{header|BASIC}}== |
=={{header|BASIC}}== |
||
{{works with|QBasic}} |
{{works with|QBasic}} |
||
This could also be done by building an array, but I felt that this was simpler. |
This could also be done by building an array, but I felt that this was simpler. |
||
Line 1,002: | Line 1,000: | ||
.0491907 .1 |
.0491907 .1 |
||
==={{header| |
==={{header|BASIC256}}=== |
||
{{trans|Gambas}} |
|||
<syntaxhighlight lang="basic256">arraybase 1 |
|||
dim byValue = {10, 18, 26, 32, 38, 44, 50, 54, 58, 62, 66, 70, 74, 78, 82, 86, 90, 94, 98, 100} |
|||
dim byLimit = {6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96} |
|||
for byCount = 1 to 100 |
|||
for byCheck = 0 to byLimit[?] |
|||
if byCount < byLimit[byCheck] then exit for |
|||
next byCheck |
|||
print ljust((byCount/100),4," "); " -> "; ljust((byValue[byCheck]/100),4," "); chr(9); |
|||
if byCount mod 5 = 0 then print |
|||
next byCount |
|||
end</syntaxhighlight> |
|||
==={{header|BBC BASIC}}=== |
|||
<syntaxhighlight lang="bbcbasic"> PRINT FNpricefraction(0.5) |
|||
END |
|||
DEF FNpricefraction(p) |
|||
IF p < 0.06 THEN = 0.10 |
|||
IF p < 0.11 THEN = 0.18 |
|||
IF p < 0.16 THEN = 0.26 |
|||
IF p < 0.21 THEN = 0.32 |
|||
IF p < 0.26 THEN = 0.38 |
|||
IF p < 0.31 THEN = 0.44 |
|||
IF p < 0.36 THEN = 0.50 |
|||
IF p < 0.41 THEN = 0.54 |
|||
IF p < 0.46 THEN = 0.58 |
|||
IF p < 0.51 THEN = 0.62 |
|||
IF p < 0.56 THEN = 0.66 |
|||
IF p < 0.61 THEN = 0.70 |
|||
IF p < 0.66 THEN = 0.74 |
|||
IF p < 0.71 THEN = 0.78 |
|||
IF p < 0.76 THEN = 0.82 |
|||
IF p < 0.81 THEN = 0.86 |
|||
IF p < 0.86 THEN = 0.90 |
|||
IF p < 0.91 THEN = 0.94 |
|||
IF p < 0.96 THEN = 0.98 |
|||
= 1.00</syntaxhighlight> |
|||
==={{header|Commodore BASIC}}=== |
|||
We'll use a couple of arrays for translation. Should work for several other 8-bit BASICs after converting the screen control codes. |
We'll use a couple of arrays for translation. Should work for several other 8-bit BASICs after converting the screen control codes. |
||
Line 1,056: | Line 1,094: | ||
ready.</pre> |
ready.</pre> |
||
=={{header| |
==={{header|FreeBASIC}}=== |
||
<syntaxhighlight lang="freebasic">' FB 1.050.0 Win64 |
|||
{{trans|Gambas}} |
|||
<syntaxhighlight lang="basic256">arraybase 1 |
|||
dim byValue = {10, 18, 26, 32, 38, 44, 50, 54, 58, 62, 66, 70, 74, 78, 82, 86, 90, 94, 98, 100} |
|||
dim byLimit = {6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96} |
|||
Function rescale(price As Double) As Double |
|||
for byCount = 1 to 100 |
|||
If price < 0.00 OrElse price > 1.00 Then Return price |
|||
for byCheck = 0 to byLimit[?] |
|||
Select Case price |
|||
if byCount < byLimit[byCheck] then exit for |
|||
Case Is < 0.06 : Return 0.10 |
|||
next byCheck |
|||
Case Is < 0.11 : Return 0.18 |
|||
print ljust((byCount/100),4," "); " -> "; ljust((byValue[byCheck]/100),4," "); chr(9); |
|||
Case Is < 0.16 : Return 0.26 |
|||
Case Is < 0.21 : Return 0.32 |
|||
next byCount |
|||
Case Is < 0.26 : Return 0.38 |
|||
end</syntaxhighlight> |
|||
Case Is < 0.31 : Return 0.44 |
|||
Case Is < 0.36 : Return 0.50 |
|||
Case Is < 0.41 : Return 0.54 |
|||
Case Is < 0.46 : Return 0.58 |
|||
Case Is < 0.51 : Return 0.62 |
|||
Case Is < 0.56 : Return 0.66 |
|||
Case Is < 0.61 : Return 0.70 |
|||
Case Is < 0.66 : Return 0.74 |
|||
Case Is < 0.71 : Return 0.78 |
|||
Case Is < 0.76 : Return 0.82 |
|||
Case Is < 0.81 : Return 0.86 |
|||
Case Is < 0.86 : Return 0.90 |
|||
Case Is < 0.91 : Return 0.94 |
|||
Case Is < 0.96 : Return 0.98 |
|||
End Select |
|||
Return 1.00 |
|||
End Function |
|||
For i As Integer = 1 To 100 |
|||
=={{header|BBC BASIC}}== |
|||
Dim d As Double = i/100.0 |
|||
<syntaxhighlight lang="bbcbasic"> PRINT FNpricefraction(0.5) |
|||
Print Using "#.##"; d; |
|||
END |
|||
Print " -> "; |
|||
Print Using "#.##"; rescale(d); |
|||
DEF FNpricefraction(p) |
|||
Print " "; |
|||
IF p < 0.06 THEN = 0.10 |
|||
If i Mod 5 = 0 Then Print |
|||
Next |
|||
IF p < 0.16 THEN = 0.26 |
|||
IF p < 0.21 THEN = 0.32 |
|||
Print |
|||
IF p < 0.26 THEN = 0.38 |
|||
Print "Press any key to quit" |
|||
IF p < 0.31 THEN = 0.44 |
|||
Sleep</syntaxhighlight> |
|||
IF p < 0.36 THEN = 0.50 |
|||
IF p < 0.41 THEN = 0.54 |
|||
{{out}} |
|||
IF p < 0.46 THEN = 0.58 |
|||
<pre> |
|||
IF p < 0.51 THEN = 0.62 |
|||
0.01 -> 0.10 0.02 -> 0.10 0.03 -> 0.10 0.04 -> 0.10 0.05 -> 0.10 |
|||
0.06 -> 0.18 0.07 -> 0.18 0.08 -> 0.18 0.09 -> 0.18 0.10 -> 0.18 |
|||
0.11 -> 0.26 0.12 -> 0.26 0.13 -> 0.26 0.14 -> 0.26 0.15 -> 0.26 |
|||
0.16 -> 0.32 0.17 -> 0.32 0.18 -> 0.32 0.19 -> 0.32 0.20 -> 0.32 |
|||
0.21 -> 0.38 0.22 -> 0.38 0.23 -> 0.38 0.24 -> 0.38 0.25 -> 0.38 |
|||
0.26 -> 0.44 0.27 -> 0.44 0.28 -> 0.44 0.29 -> 0.44 0.30 -> 0.44 |
|||
0.31 -> 0.50 0.32 -> 0.50 0.33 -> 0.50 0.34 -> 0.50 0.35 -> 0.50 |
|||
0.36 -> 0.54 0.37 -> 0.54 0.38 -> 0.54 0.39 -> 0.54 0.40 -> 0.54 |
|||
0.41 -> 0.58 0.42 -> 0.58 0.43 -> 0.58 0.44 -> 0.58 0.45 -> 0.58 |
|||
0.46 -> 0.62 0.47 -> 0.62 0.48 -> 0.62 0.49 -> 0.62 0.50 -> 0.62 |
|||
= 1.00</syntaxhighlight> |
|||
0.51 -> 0.66 0.52 -> 0.66 0.53 -> 0.66 0.54 -> 0.66 0.55 -> 0.66 |
|||
0.56 -> 0.70 0.57 -> 0.70 0.58 -> 0.70 0.59 -> 0.70 0.60 -> 0.70 |
|||
0.61 -> 0.74 0.62 -> 0.74 0.63 -> 0.74 0.64 -> 0.74 0.65 -> 0.74 |
|||
0.66 -> 0.78 0.67 -> 0.78 0.68 -> 0.78 0.69 -> 0.78 0.70 -> 0.78 |
|||
0.71 -> 0.82 0.72 -> 0.82 0.73 -> 0.82 0.74 -> 0.82 0.75 -> 0.82 |
|||
0.76 -> 0.86 0.77 -> 0.86 0.78 -> 0.86 0.79 -> 0.86 0.80 -> 0.86 |
|||
0.81 -> 0.90 0.82 -> 0.90 0.83 -> 0.90 0.84 -> 0.90 0.85 -> 0.90 |
|||
0.86 -> 0.94 0.87 -> 0.94 0.88 -> 0.94 0.89 -> 0.94 0.90 -> 0.94 |
|||
0.91 -> 0.98 0.92 -> 0.98 0.93 -> 0.98 0.94 -> 0.98 0.95 -> 0.98 |
|||
0.96 -> 1.00 0.97 -> 1.00 0.98 -> 1.00 0.99 -> 1.00 1.00 -> 1.00 |
|||
</pre> |
|||
==={{header|Gambas}}=== |
|||
'''[https://gambas-playground.proko.eu/?gist=87527eed297164593d88aa2c35898eaf Click this link to run this code]''' |
|||
<syntaxhighlight lang="gambas">Public Sub Main() |
|||
Dim byValue As Byte[] = [10, 18, 26, 32, 38, 44, 50, 54, 58, 62, 66, 70, 74, 78, 82, 86, 90, 94, 98, 100] |
|||
Dim byLimit As Byte[] = [6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96] |
|||
Dim byCount, byCheck As Byte |
|||
For byCount = 0 To 100 |
|||
For byCheck = 0 To byLimit.Max |
|||
If byCount < byLimit[byCheck] Then Break |
|||
Next |
|||
Print Format(byCount / 100, "0.00") & " = " & Format(byValue[byCheck] / 100, "0.00") & gb.Tab; |
|||
If byCount Mod 5 = 0 Then Print |
|||
Next |
|||
End </syntaxhighlight> |
|||
Output: |
|||
<pre> |
|||
0.00 = 0.10 |
|||
0.01 = 0.10 0.02 = 0.10 0.03 = 0.10 0.04 = 0.10 0.05 = 0.10 |
|||
0.06 = 0.18 0.07 = 0.18 0.08 = 0.18 0.09 = 0.18 0.10 = 0.18 |
|||
0.11 = 0.26 0.12 = 0.26 0.13 = 0.26 0.14 = 0.26 0.15 = 0.26 |
|||
0.16 = 0.32 0.17 = 0.32 0.18 = 0.32 0.19 = 0.32 0.20 = 0.32 |
|||
0.21 = 0.38 0.22 = 0.38 0.23 = 0.38 0.24 = 0.38 0.25 = 0.38 |
|||
0.26 = 0.44 0.27 = 0.44 0.28 = 0.44 0.29 = 0.44 0.30 = 0.44 |
|||
0.31 = 0.50 0.32 = 0.50 0.33 = 0.50 0.34 = 0.50 0.35 = 0.50 |
|||
0.36 = 0.54 0.37 = 0.54 0.38 = 0.54 0.39 = 0.54 0.40 = 0.54 |
|||
0.41 = 0.58 0.42 = 0.58 0.43 = 0.58 0.44 = 0.58 0.45 = 0.58 |
|||
0.46 = 0.62 0.47 = 0.62 0.48 = 0.62 0.49 = 0.62 0.50 = 0.62 |
|||
0.51 = 0.66 0.52 = 0.66 0.53 = 0.66 0.54 = 0.66 0.55 = 0.66 |
|||
0.56 = 0.70 0.57 = 0.70 0.58 = 0.70 0.59 = 0.70 0.60 = 0.70 |
|||
0.61 = 0.74 0.62 = 0.74 0.63 = 0.74 0.64 = 0.74 0.65 = 0.74 |
|||
0.66 = 0.78 0.67 = 0.78 0.68 = 0.78 0.69 = 0.78 0.70 = 0.78 |
|||
0.71 = 0.82 0.72 = 0.82 0.73 = 0.82 0.74 = 0.82 0.75 = 0.82 |
|||
0.76 = 0.86 0.77 = 0.86 0.78 = 0.86 0.79 = 0.86 0.80 = 0.86 |
|||
0.81 = 0.90 0.82 = 0.90 0.83 = 0.90 0.84 = 0.90 0.85 = 0.90 |
|||
0.86 = 0.94 0.87 = 0.94 0.88 = 0.94 0.89 = 0.94 0.90 = 0.94 |
|||
0.91 = 0.98 0.92 = 0.98 0.93 = 0.98 0.94 = 0.98 0.95 = 0.98 |
|||
0.96 = 1.00 0.97 = 1.00 0.98 = 1.00 0.99 = 1.00 1.00 = 1.00 |
|||
</pre> |
|||
==={{header|Liberty BASIC}}=== |
|||
<syntaxhighlight lang="lb"> |
|||
dim DR(38) 'decimal range |
|||
dim PF(38) 'corresponding price fraction |
|||
range$="0.06 0.11 0.16 0.21 0.26 0.31 0.36 0.41 0.46 0.51 0.56 0.61 0.66 0.71 0.76 0.81 0.86 0.91 0.96 0.01" |
|||
frac$="0.10 0.18 0.26 0.32 0.38 0.44 0.50 0.54 0.58 0.62 0.66 0.70 0.74 0.78 0.82 0.86 0.90 0.94 0.98 1.00" |
|||
for i = 1 to 38 |
|||
DR(i)=val(word$(range$,i)) |
|||
PF(i)=val(word$(frac$,i)) |
|||
next |
|||
for i = 0 to .99 step 0.03 |
|||
print i;" -> ";PriceFraction(i) |
|||
next |
|||
end |
|||
Function PriceFraction(n) |
|||
PriceFraction=n 'return original if outside test bounds |
|||
for i = 1 to 38 |
|||
if n<=DR(i) then |
|||
PriceFraction=PF(i) |
|||
exit for |
|||
end if |
|||
next |
|||
end function |
|||
</syntaxhighlight> |
|||
==={{header|PureBasic}}=== |
|||
<syntaxhighlight lang="purebasic">Procedure.f PriceFraction(price.f) |
|||
;returns price unchanged if value is invalid |
|||
Protected fraction |
|||
Select price * 100 |
|||
Case 0 To 5 |
|||
fraction = 10 |
|||
Case 06 To 10 |
|||
fraction = 18 |
|||
Case 11 To 15 |
|||
fraction = 26 |
|||
Case 16 To 20 |
|||
fraction = 32 |
|||
Case 21 To 25 |
|||
fraction = 38 |
|||
Case 26 To 30 |
|||
fraction = 44 |
|||
Case 31 To 35 |
|||
fraction = 5 |
|||
Case 36 To 40 |
|||
fraction = 54 |
|||
Case 41 To 45 |
|||
fraction = 58 |
|||
Case 46 To 50 |
|||
fraction = 62 |
|||
Case 51 To 55 |
|||
fraction = 66 |
|||
Case 56 To 60 |
|||
fraction = 7 |
|||
Case 61 To 65 |
|||
fraction = 74 |
|||
Case 66 To 70 |
|||
fraction = 78 |
|||
Case 71 To 75 |
|||
fraction = 82 |
|||
Case 76 To 80 |
|||
fraction = 86 |
|||
Case 81 To 85 |
|||
fraction = 9 |
|||
Case 86 To 90 |
|||
fraction = 94 |
|||
Case 91 To 95 |
|||
fraction = 98 |
|||
Case 96 To 100 |
|||
fraction = 100 |
|||
Default |
|||
ProcedureReturn price |
|||
EndSelect |
|||
ProcedureReturn fraction / 100 |
|||
EndProcedure |
|||
If OpenConsole() |
|||
Define x.f, i |
|||
For i = 1 To 10 |
|||
x = Random(10000)/10000 |
|||
PrintN(StrF(x, 4) + " -> " + StrF(PriceFraction(x), 2)) |
|||
Next |
|||
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit") |
|||
Input() |
|||
CloseConsole() |
|||
EndIf</syntaxhighlight> |
|||
{{out}} |
|||
<pre>0.3793 -> 0.54 |
|||
0.4425 -> 0.58 |
|||
0.0746 -> 0.18 |
|||
0.6918 -> 0.78 |
|||
0.2993 -> 0.44 |
|||
0.5486 -> 0.66 |
|||
0.7848 -> 0.86 |
|||
0.9383 -> 0.98 |
|||
0.2292 -> 0.38 |
|||
0.9560 -> 1.00</pre> |
|||
==={{header|Run BASIC}}=== |
|||
<syntaxhighlight lang="runbasic">data .06, .1,.11,.18,.16,.26,.21,.32,.26,.38,.31,.44,.36,.50,.41,.54,.46,.58,.51,.62 |
|||
data .56,.66,.61,.70,.66,.74,.71,.78,.76,.82,.81,.86,.86,.90,.91,.94,.96,.98 |
|||
dim od(100) |
|||
dim nd(100) |
|||
for i = 1 to 19 |
|||
read oldDec |
|||
read newDec |
|||
j = j + 1 |
|||
for j = j to oldDec * 100 |
|||
nd(j) = newDec |
|||
next j |
|||
next i |
|||
[loop] |
|||
input "Gimme a number";numb |
|||
decm = val(using("##",(numb mod 1) * 100)) |
|||
print numb;" -->";nd(decm) |
|||
goto [loop]</syntaxhighlight> |
|||
<pre>Gimme a number?12.676 |
|||
12.676 -->0.78 |
|||
Gimme a number?4.876 |
|||
4.876 -->0.94 |
|||
Gimme a number?34.12 |
|||
34.12 -->0.26</pre> |
|||
==={{header|uBasic/4tH}}=== |
|||
{{trans|Forth}} |
|||
{{works with|R3}} |
|||
<syntaxhighlight lang="text">For i = 0 To 100 Step 5 |
|||
Print Using "+?.##"; i, Using "+?.##"; FUNC(_Normalize (FUNC(_Classify (i)))) |
|||
Next |
|||
End |
|||
_Normalize ' normalize the price |
|||
Param (1) ' class |
|||
Local (4) ' accumulator, increment, switch and iterator |
|||
b@ = 0 : c@ = 10 : d@ = 2 ' setup accumulator, increment and switch |
|||
For e@ = 0 to a@ ' from zero to class |
|||
If And(e@ + 1, d@) Then d@ = And(d@ + d@, 15) : c@ = c@ - 2 |
|||
b@ = b@ + c@ ' switch increment if needed |
|||
Next ' accumulate price |
|||
Return (Min(b@, 100)) ' clip top of price in accumulator |
|||
' calculate class |
|||
_Classify Param (1) : Return ((a@ - (a@>0)) / 5)</syntaxhighlight> |
|||
Output: |
|||
<pre> |
|||
0.00 0.10 |
|||
0.05 0.10 |
|||
0.10 0.18 |
|||
0.15 0.26 |
|||
0.20 0.32 |
|||
0.25 0.38 |
|||
0.30 0.44 |
|||
0.35 0.50 |
|||
0.40 0.54 |
|||
0.45 0.58 |
|||
0.50 0.62 |
|||
0.55 0.66 |
|||
0.60 0.70 |
|||
0.65 0.74 |
|||
0.70 0.78 |
|||
0.75 0.82 |
|||
0.80 0.86 |
|||
0.85 0.90 |
|||
0.90 0.94 |
|||
0.95 0.98 |
|||
1.00 1.00 |
|||
0 OK, 0:115</pre> |
|||
==={{header|VBA}}=== |
|||
<syntaxhighlight lang="vb"> |
|||
Option Explicit |
|||
Sub Main() |
|||
Dim test, i As Long |
|||
test = Array(0.34, 0.070145, 0.06, 0.05, 0.50214, 0.56, 1#, 0.99, 0#, 0.7388727) |
|||
For i = 0 To UBound(test) |
|||
Debug.Print test(i) & " := " & Price_Fraction(CSng(test(i))) |
|||
Next i |
|||
End Sub |
|||
Private Function Price_Fraction(n As Single) As Single |
|||
Dim Vin, Vout, i As Long |
|||
Vin = Array(0.06, 0.11, 0.16, 0.21, 0.26, 0.31, 0.36, 0.41, 0.46, 0.51, 0.56, 0.61, 0.66, 0.71, 0.76, 0.81, 0.86, 0.91, 0.96, 1.01) |
|||
Vout = Array(0.1, 0.18, 0.26, 0.32, 0.38, 0.44, 0.5, 0.54, 0.58, 0.62, 0.66, 0.7, 0.74, 0.78, 0.82, 0.86, 0.9, 0.94, 0.98, 1#) |
|||
For i = 0 To UBound(Vin) |
|||
If n < Vin(i) Then Price_Fraction = Vout(i): Exit For |
|||
Next i |
|||
End Function</syntaxhighlight> |
|||
{{Out}} |
|||
<pre>0.34 := 0.5 |
|||
0.070145 := 0.18 |
|||
0.06 := 0.18 |
|||
0.05 := 0.1 |
|||
0.50214 := 0.62 |
|||
0.56 := 0.7 |
|||
1 := 1 |
|||
0.99 := 1 |
|||
0 := 0.1 |
|||
0.7388727 := 0.82</pre> |
|||
=={{header|Beads}}== |
=={{header|Beads}}== |
||
Line 1,966: | Line 2,282: | ||
0.347081 0.50 |
0.347081 0.50 |
||
0.342244 0.50</syntaxhighlight> |
0.342244 0.50</syntaxhighlight> |
||
=={{header|FreeBASIC}}== |
|||
<syntaxhighlight lang="freebasic">' FB 1.050.0 Win64 |
|||
Function rescale(price As Double) As Double |
|||
If price < 0.00 OrElse price > 1.00 Then Return price |
|||
Select Case price |
|||
Case Is < 0.06 : Return 0.10 |
|||
Case Is < 0.11 : Return 0.18 |
|||
Case Is < 0.16 : Return 0.26 |
|||
Case Is < 0.21 : Return 0.32 |
|||
Case Is < 0.26 : Return 0.38 |
|||
Case Is < 0.31 : Return 0.44 |
|||
Case Is < 0.36 : Return 0.50 |
|||
Case Is < 0.41 : Return 0.54 |
|||
Case Is < 0.46 : Return 0.58 |
|||
Case Is < 0.51 : Return 0.62 |
|||
Case Is < 0.56 : Return 0.66 |
|||
Case Is < 0.61 : Return 0.70 |
|||
Case Is < 0.66 : Return 0.74 |
|||
Case Is < 0.71 : Return 0.78 |
|||
Case Is < 0.76 : Return 0.82 |
|||
Case Is < 0.81 : Return 0.86 |
|||
Case Is < 0.86 : Return 0.90 |
|||
Case Is < 0.91 : Return 0.94 |
|||
Case Is < 0.96 : Return 0.98 |
|||
End Select |
|||
Return 1.00 |
|||
End Function |
|||
For i As Integer = 1 To 100 |
|||
Dim d As Double = i/100.0 |
|||
Print Using "#.##"; d; |
|||
Print " -> "; |
|||
Print Using "#.##"; rescale(d); |
|||
Print " "; |
|||
If i Mod 5 = 0 Then Print |
|||
Next |
|||
Print |
|||
Print "Press any key to quit" |
|||
Sleep</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
0.01 -> 0.10 0.02 -> 0.10 0.03 -> 0.10 0.04 -> 0.10 0.05 -> 0.10 |
|||
0.06 -> 0.18 0.07 -> 0.18 0.08 -> 0.18 0.09 -> 0.18 0.10 -> 0.18 |
|||
0.11 -> 0.26 0.12 -> 0.26 0.13 -> 0.26 0.14 -> 0.26 0.15 -> 0.26 |
|||
0.16 -> 0.32 0.17 -> 0.32 0.18 -> 0.32 0.19 -> 0.32 0.20 -> 0.32 |
|||
0.21 -> 0.38 0.22 -> 0.38 0.23 -> 0.38 0.24 -> 0.38 0.25 -> 0.38 |
|||
0.26 -> 0.44 0.27 -> 0.44 0.28 -> 0.44 0.29 -> 0.44 0.30 -> 0.44 |
|||
0.31 -> 0.50 0.32 -> 0.50 0.33 -> 0.50 0.34 -> 0.50 0.35 -> 0.50 |
|||
0.36 -> 0.54 0.37 -> 0.54 0.38 -> 0.54 0.39 -> 0.54 0.40 -> 0.54 |
|||
0.41 -> 0.58 0.42 -> 0.58 0.43 -> 0.58 0.44 -> 0.58 0.45 -> 0.58 |
|||
0.46 -> 0.62 0.47 -> 0.62 0.48 -> 0.62 0.49 -> 0.62 0.50 -> 0.62 |
|||
0.51 -> 0.66 0.52 -> 0.66 0.53 -> 0.66 0.54 -> 0.66 0.55 -> 0.66 |
|||
0.56 -> 0.70 0.57 -> 0.70 0.58 -> 0.70 0.59 -> 0.70 0.60 -> 0.70 |
|||
0.61 -> 0.74 0.62 -> 0.74 0.63 -> 0.74 0.64 -> 0.74 0.65 -> 0.74 |
|||
0.66 -> 0.78 0.67 -> 0.78 0.68 -> 0.78 0.69 -> 0.78 0.70 -> 0.78 |
|||
0.71 -> 0.82 0.72 -> 0.82 0.73 -> 0.82 0.74 -> 0.82 0.75 -> 0.82 |
|||
0.76 -> 0.86 0.77 -> 0.86 0.78 -> 0.86 0.79 -> 0.86 0.80 -> 0.86 |
|||
0.81 -> 0.90 0.82 -> 0.90 0.83 -> 0.90 0.84 -> 0.90 0.85 -> 0.90 |
|||
0.86 -> 0.94 0.87 -> 0.94 0.88 -> 0.94 0.89 -> 0.94 0.90 -> 0.94 |
|||
0.91 -> 0.98 0.92 -> 0.98 0.93 -> 0.98 0.94 -> 0.98 0.95 -> 0.98 |
|||
0.96 -> 1.00 0.97 -> 1.00 0.98 -> 1.00 0.99 -> 1.00 1.00 -> 1.00 |
|||
</pre> |
|||
=={{header|Gambas}}== |
|||
'''[https://gambas-playground.proko.eu/?gist=87527eed297164593d88aa2c35898eaf Click this link to run this code]''' |
|||
<syntaxhighlight lang="gambas">Public Sub Main() |
|||
Dim byValue As Byte[] = [10, 18, 26, 32, 38, 44, 50, 54, 58, 62, 66, 70, 74, 78, 82, 86, 90, 94, 98, 100] |
|||
Dim byLimit As Byte[] = [6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96] |
|||
Dim byCount, byCheck As Byte |
|||
For byCount = 0 To 100 |
|||
For byCheck = 0 To byLimit.Max |
|||
If byCount < byLimit[byCheck] Then Break |
|||
Next |
|||
Print Format(byCount / 100, "0.00") & " = " & Format(byValue[byCheck] / 100, "0.00") & gb.Tab; |
|||
If byCount Mod 5 = 0 Then Print |
|||
Next |
|||
End </syntaxhighlight> |
|||
Output: |
|||
<pre> |
|||
0.00 = 0.10 |
|||
0.01 = 0.10 0.02 = 0.10 0.03 = 0.10 0.04 = 0.10 0.05 = 0.10 |
|||
0.06 = 0.18 0.07 = 0.18 0.08 = 0.18 0.09 = 0.18 0.10 = 0.18 |
|||
0.11 = 0.26 0.12 = 0.26 0.13 = 0.26 0.14 = 0.26 0.15 = 0.26 |
|||
0.16 = 0.32 0.17 = 0.32 0.18 = 0.32 0.19 = 0.32 0.20 = 0.32 |
|||
0.21 = 0.38 0.22 = 0.38 0.23 = 0.38 0.24 = 0.38 0.25 = 0.38 |
|||
0.26 = 0.44 0.27 = 0.44 0.28 = 0.44 0.29 = 0.44 0.30 = 0.44 |
|||
0.31 = 0.50 0.32 = 0.50 0.33 = 0.50 0.34 = 0.50 0.35 = 0.50 |
|||
0.36 = 0.54 0.37 = 0.54 0.38 = 0.54 0.39 = 0.54 0.40 = 0.54 |
|||
0.41 = 0.58 0.42 = 0.58 0.43 = 0.58 0.44 = 0.58 0.45 = 0.58 |
|||
0.46 = 0.62 0.47 = 0.62 0.48 = 0.62 0.49 = 0.62 0.50 = 0.62 |
|||
0.51 = 0.66 0.52 = 0.66 0.53 = 0.66 0.54 = 0.66 0.55 = 0.66 |
|||
0.56 = 0.70 0.57 = 0.70 0.58 = 0.70 0.59 = 0.70 0.60 = 0.70 |
|||
0.61 = 0.74 0.62 = 0.74 0.63 = 0.74 0.64 = 0.74 0.65 = 0.74 |
|||
0.66 = 0.78 0.67 = 0.78 0.68 = 0.78 0.69 = 0.78 0.70 = 0.78 |
|||
0.71 = 0.82 0.72 = 0.82 0.73 = 0.82 0.74 = 0.82 0.75 = 0.82 |
|||
0.76 = 0.86 0.77 = 0.86 0.78 = 0.86 0.79 = 0.86 0.80 = 0.86 |
|||
0.81 = 0.90 0.82 = 0.90 0.83 = 0.90 0.84 = 0.90 0.85 = 0.90 |
|||
0.86 = 0.94 0.87 = 0.94 0.88 = 0.94 0.89 = 0.94 0.90 = 0.94 |
|||
0.91 = 0.98 0.92 = 0.98 0.93 = 0.98 0.94 = 0.98 0.95 = 0.98 |
|||
0.96 = 1.00 0.97 = 1.00 0.98 = 1.00 0.99 = 1.00 1.00 = 1.00 |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |
||
Line 2,698: | Line 2,907: | ||
<pre>0.32 |
<pre>0.32 |
||
0.82</pre> |
0.82</pre> |
||
=={{header|Liberty BASIC}}== |
|||
<syntaxhighlight lang="lb"> |
|||
dim DR(38) 'decimal range |
|||
dim PF(38) 'corresponding price fraction |
|||
range$="0.06 0.11 0.16 0.21 0.26 0.31 0.36 0.41 0.46 0.51 0.56 0.61 0.66 0.71 0.76 0.81 0.86 0.91 0.96 0.01" |
|||
frac$="0.10 0.18 0.26 0.32 0.38 0.44 0.50 0.54 0.58 0.62 0.66 0.70 0.74 0.78 0.82 0.86 0.90 0.94 0.98 1.00" |
|||
for i = 1 to 38 |
|||
DR(i)=val(word$(range$,i)) |
|||
PF(i)=val(word$(frac$,i)) |
|||
next |
|||
for i = 0 to .99 step 0.03 |
|||
print i;" -> ";PriceFraction(i) |
|||
next |
|||
end |
|||
Function PriceFraction(n) |
|||
PriceFraction=n 'return original if outside test bounds |
|||
for i = 1 to 38 |
|||
if n<=DR(i) then |
|||
PriceFraction=PF(i) |
|||
exit for |
|||
end if |
|||
next |
|||
end function |
|||
</syntaxhighlight> |
|||
=={{header|Lua}}== |
=={{header|Lua}}== |
||
Line 3,544: | Line 3,726: | ||
$0.10 |
$0.10 |
||
</pre> |
</pre> |
||
=={{header|PureBasic}}== |
|||
<syntaxhighlight lang="purebasic">Procedure.f PriceFraction(price.f) |
|||
;returns price unchanged if value is invalid |
|||
Protected fraction |
|||
Select price * 100 |
|||
Case 0 To 5 |
|||
fraction = 10 |
|||
Case 06 To 10 |
|||
fraction = 18 |
|||
Case 11 To 15 |
|||
fraction = 26 |
|||
Case 16 To 20 |
|||
fraction = 32 |
|||
Case 21 To 25 |
|||
fraction = 38 |
|||
Case 26 To 30 |
|||
fraction = 44 |
|||
Case 31 To 35 |
|||
fraction = 5 |
|||
Case 36 To 40 |
|||
fraction = 54 |
|||
Case 41 To 45 |
|||
fraction = 58 |
|||
Case 46 To 50 |
|||
fraction = 62 |
|||
Case 51 To 55 |
|||
fraction = 66 |
|||
Case 56 To 60 |
|||
fraction = 7 |
|||
Case 61 To 65 |
|||
fraction = 74 |
|||
Case 66 To 70 |
|||
fraction = 78 |
|||
Case 71 To 75 |
|||
fraction = 82 |
|||
Case 76 To 80 |
|||
fraction = 86 |
|||
Case 81 To 85 |
|||
fraction = 9 |
|||
Case 86 To 90 |
|||
fraction = 94 |
|||
Case 91 To 95 |
|||
fraction = 98 |
|||
Case 96 To 100 |
|||
fraction = 100 |
|||
Default |
|||
ProcedureReturn price |
|||
EndSelect |
|||
ProcedureReturn fraction / 100 |
|||
EndProcedure |
|||
If OpenConsole() |
|||
Define x.f, i |
|||
For i = 1 To 10 |
|||
x = Random(10000)/10000 |
|||
PrintN(StrF(x, 4) + " -> " + StrF(PriceFraction(x), 2)) |
|||
Next |
|||
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit") |
|||
Input() |
|||
CloseConsole() |
|||
EndIf</syntaxhighlight> |
|||
{{out}} |
|||
<pre>0.3793 -> 0.54 |
|||
0.4425 -> 0.58 |
|||
0.0746 -> 0.18 |
|||
0.6918 -> 0.78 |
|||
0.2993 -> 0.44 |
|||
0.5486 -> 0.66 |
|||
0.7848 -> 0.86 |
|||
0.9383 -> 0.98 |
|||
0.2292 -> 0.38 |
|||
0.9560 -> 1.00</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |
||
Line 4,245: | Line 4,351: | ||
1 tests, 22 assertions, 0 failures, 0 errors, 0 skips</pre> |
1 tests, 22 assertions, 0 failures, 0 errors, 0 skips</pre> |
||
=={{header|Run BASIC}}== |
|||
<syntaxhighlight lang="runbasic">data .06, .1,.11,.18,.16,.26,.21,.32,.26,.38,.31,.44,.36,.50,.41,.54,.46,.58,.51,.62 |
|||
data .56,.66,.61,.70,.66,.74,.71,.78,.76,.82,.81,.86,.86,.90,.91,.94,.96,.98 |
|||
dim od(100) |
|||
dim nd(100) |
|||
for i = 1 to 19 |
|||
read oldDec |
|||
read newDec |
|||
j = j + 1 |
|||
for j = j to oldDec * 100 |
|||
nd(j) = newDec |
|||
next j |
|||
next i |
|||
[loop] |
|||
input "Gimme a number";numb |
|||
decm = val(using("##",(numb mod 1) * 100)) |
|||
print numb;" -->";nd(decm) |
|||
goto [loop]</syntaxhighlight> |
|||
<pre>Gimme a number?12.676 |
|||
12.676 -->0.78 |
|||
Gimme a number?4.876 |
|||
4.876 -->0.94 |
|||
Gimme a number?34.12 |
|||
34.12 -->0.26</pre> |
|||
=={{header|Rust}}== |
=={{header|Rust}}== |
||
Line 4,761: | Line 4,839: | ||
</pre> |
</pre> |
||
=={{header|uBasic/4tH}}== |
|||
{{trans|Forth}} |
|||
{{works with|R3}} |
|||
<syntaxhighlight lang="text">For i = 0 To 100 Step 5 |
|||
Print Using "+?.##"; i, Using "+?.##"; FUNC(_Normalize (FUNC(_Classify (i)))) |
|||
Next |
|||
End |
|||
_Normalize ' normalize the price |
|||
Param (1) ' class |
|||
Local (4) ' accumulator, increment, switch and iterator |
|||
b@ = 0 : c@ = 10 : d@ = 2 ' setup accumulator, increment and switch |
|||
For e@ = 0 to a@ ' from zero to class |
|||
If And(e@ + 1, d@) Then d@ = And(d@ + d@, 15) : c@ = c@ - 2 |
|||
b@ = b@ + c@ ' switch increment if needed |
|||
Next ' accumulate price |
|||
Return (Min(b@, 100)) ' clip top of price in accumulator |
|||
' calculate class |
|||
_Classify Param (1) : Return ((a@ - (a@>0)) / 5)</syntaxhighlight> |
|||
Output: |
|||
<pre> |
|||
0.00 0.10 |
|||
0.05 0.10 |
|||
0.10 0.18 |
|||
0.15 0.26 |
|||
0.20 0.32 |
|||
0.25 0.38 |
|||
0.30 0.44 |
|||
0.35 0.50 |
|||
0.40 0.54 |
|||
0.45 0.58 |
|||
0.50 0.62 |
|||
0.55 0.66 |
|||
0.60 0.70 |
|||
0.65 0.74 |
|||
0.70 0.78 |
|||
0.75 0.82 |
|||
0.80 0.86 |
|||
0.85 0.90 |
|||
0.90 0.94 |
|||
0.95 0.98 |
|||
1.00 1.00 |
|||
0 OK, 0:115</pre> |
|||
=={{header|Ursala}}== |
=={{header|Ursala}}== |
||
<syntaxhighlight lang="ursala">#import flo |
<syntaxhighlight lang="ursala">#import flo |
||
Line 4,838: | Line 4,869: | ||
1.000000e+00, |
1.000000e+00, |
||
1.000000e-01></pre> |
1.000000e-01></pre> |
||
=={{header|VBA}}== |
|||
<syntaxhighlight lang="vb"> |
|||
Option Explicit |
|||
Sub Main() |
|||
Dim test, i As Long |
|||
test = Array(0.34, 0.070145, 0.06, 0.05, 0.50214, 0.56, 1#, 0.99, 0#, 0.7388727) |
|||
For i = 0 To UBound(test) |
|||
Debug.Print test(i) & " := " & Price_Fraction(CSng(test(i))) |
|||
Next i |
|||
End Sub |
|||
Private Function Price_Fraction(n As Single) As Single |
|||
Dim Vin, Vout, i As Long |
|||
Vin = Array(0.06, 0.11, 0.16, 0.21, 0.26, 0.31, 0.36, 0.41, 0.46, 0.51, 0.56, 0.61, 0.66, 0.71, 0.76, 0.81, 0.86, 0.91, 0.96, 1.01) |
|||
Vout = Array(0.1, 0.18, 0.26, 0.32, 0.38, 0.44, 0.5, 0.54, 0.58, 0.62, 0.66, 0.7, 0.74, 0.78, 0.82, 0.86, 0.9, 0.94, 0.98, 1#) |
|||
For i = 0 To UBound(Vin) |
|||
If n < Vin(i) Then Price_Fraction = Vout(i): Exit For |
|||
Next i |
|||
End Function</syntaxhighlight> |
|||
{{Out}} |
|||
<pre>0.34 := 0.5 |
|||
0.070145 := 0.18 |
|||
0.06 := 0.18 |
|||
0.05 := 0.1 |
|||
0.50214 := 0.62 |
|||
0.56 := 0.7 |
|||
1 := 1 |
|||
0.99 := 1 |
|||
0 := 0.1 |
|||
0.7388727 := 0.82</pre> |
|||
=={{header|VBScript}}== |
=={{header|VBScript}}== |