A friend of mine runs a pharmacy.   He has a specialized function in his Dispensary application which receives a decimal value of currency and replaces it to a standard value.   This value is regulated by a government department.



Task

Given a floating point value between   0.00   and   1.00,   rescale according to the following table:

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



/* NetRexx */
options replace format comments java crossref symbols nobinary
 
runSample(arg)
return
 
-- -----------------------------------------------------------------------------
method runSample(arg) public static
  parse arg in_val .
  if in_val \= '' then test_vals = [in_val]
  else                 test_vals = getTestData()
 
  say 'Input Adjustment'
  loop tv = 0 to test_vals.length - 1
    in_val = test_vals[tv]
    adjust = priceFraction(in_val)
    say in_val.format(null, 2).right(5) adjust.format(null, 2).right(10)
    end tv
 
  return
 
-- -----------------------------------------------------------------------------
method priceFraction(in_val) public static
  out_val = -1
  limit_table = getLimitTable()
  limit_table_K = limit_table.length
  loop p1 = 0 to limit_table_K - 1
    pair = limit_table[p1]
    hi_limit = pair[0]
    adjustmt = pair[1]
    if in_val < hi_limit then do
      out_val = adjustmt
      leave p1
      end
    end p1
  if out_val = -1 then signal IllegalArgumentException('Input' in_val 'is outside of acceptable range.')
 
  return out_val
 
-- -----------------------------------------------------------------------------
method getLimitTable() public static returns Rexx[,]
  limit_table = [ -
    [0.06, 0.10], [0.11, 0.18], [0.16, 0.26], [0.21, 0.32], [0.26, 0.38], -
    [0.31, 0.44], [0.36, 0.50], [0.41, 0.54], [0.46, 0.58], [0.51, 0.62], -
    [0.56, 0.66], [0.61, 0.70], [0.66, 0.74], [0.71, 0.78], [0.76, 0.82], -
    [0.81, 0.86], [0.86, 0.90], [0.91, 0.94], [0.96, 0.98], [1.01, 1.00]  -
  ]
  return limit_table
 
-- -----------------------------------------------------------------------------
method getTestData() private static returns Rexx[]
  test_vals = Rexx[5]
  rng = Random(1024)
  loop tv = 0 to test_vals.length - 1
    test_vals[tv] = rng.nextFloat()
    end tv
  return test_vals
 