Douglas Livingstone wrote: > I want to make strings like this: > > $100.00 plus $22.00 per month > $100.00 > $22.00 per week > free (I want this when both numbers are zero) > > Generally: [one off fee] plus [fee per billing cycle] per [billing cycle length] > > I have working code, and in any other language I'd take the uglyness > for granted, but in Ruby I still have hope. So, what would be a better > way to write this? I've put the code I put together at the bottom. I'll try to start from scratch so please point any errors I might have introduced: # Note that this is not designed to work properly with Floats as it # directly compares to 0 -- use a delta if it also should work with # Floats. def human_price(currency, base_fee, cycle_fee, cycle_length) has_base_fee = base_fee != 0 has_cycle_fee = cycle_fee != 0 result = "" result << "%s%.2f" % [currency, base_fee] if has_base_fee if has_cycle_fee then result << " plus " if has_base_fee result << "%s%.2f per %s" % [currency, cycle_fee, cycle_length] end result = "free" if result.empty? return result end The formating of a single price could be out-factored, but I think in this simple case it is still reasonable to just have the logic two times in the method...