Price fraction: Difference between revisions

Content added Content deleted
No edit summary
(→‎{{header|Tcl}}: ++ smalltalk)
Line 902: Line 902:


1 tests, 22 assertions, 0 failures, 0 errors, 0 skips</pre>
1 tests, 22 assertions, 0 failures, 0 errors, 0 skips</pre>

=={{header|Smalltalk}}==
{{works with|GNU Smalltalk}}
<lang smalltalk>"Table driven rescale"
Object subclass: PriceRescale [
|table|
PriceRescale class >> new: theTable [
^ self basicNew initialize: theTable
]
initialize: theTable [
table := theTable asOrderedCollection.
^self
]
rescale: aPrice [ |v1 v2|
1 to: (table size - 1) do: [:i|
v1 := table at: i.
v2 := table at: (i+1).
((aPrice >= (v1 x)) & (aPrice < (v2 x)))
ifTrue: [ ^ v1 y ]
].
(aPrice < ((v1:=(table first)) x)) ifTrue: [ ^ v1 y ].
(aPrice >= ((v1:=(table last)) x)) ifTrue: [ ^ v1 y ]
]
].

|pr|
pr := PriceRescale
new: { 0.00@0.10 .
0.06@0.18 .
0.11@0.26 .
0.16@0.32 .
0.21@0.38 .
0.26@0.44 .
0.31@0.50 .
0.36@0.54 .
0.41@0.58 .
0.46@0.62 .
0.51@0.66 .
0.56@0.70 .
0.61@0.74 .
0.66@0.78 .
0.71@0.82 .
0.76@0.86 .
0.81@0.90 .
0.86@0.94 .
0.91@0.98 .
0.96@1.00 .
1.01@1.00
}.

"get a price"
(pr rescale: ( (Random between: 0 and: 100)/100 )) displayNl.</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==