Hel;p with Tip Calculator

puts “What is the total?”
input = gets.chomp.to_i
puts “What percent do you want to tip?”
input2 = gets.chomp.to_i
percent = 100
tip = input2 * input * 0.01
puts “You should tip $#{tip}”

This is a tip calculator. I want it to work if the person enters $45 or
15%.

Right now, it would only return 0 because they are invalid numbers. It
would only work with an input of 15 or 45. I have really no clue how to
do that.

On Mon, 9 Aug 2010 00:46:29 +0900
Hd Pwnz0r [email protected] wrote:

Right now, it would only return 0 because they are invalid numbers. It
would only work with an input of 15 or 45. I have really no clue how
to do that.

Use

‘45 %’.sub(/%/, ‘’).strip
‘14 $’.sub(/[$]/, ‘’).strip

for that.

“strip” can remove unwanted trailing and leading blanks.
“sub” substitutes the charachters in the RE with an empty string
removing them.

Regards,
Andrei

On Sun, Aug 8, 2010 at 8:59 AM, Andrei B. [email protected]
wrote:

Use

‘45 %’.sub(/%/, ‘’).strip
‘14 $’.sub(/[$]/, ‘’).strip

More universally

input_string.gsub(/\D/, ‘’)

removes any non-[0-9] characters, including white space.

Hassan S. wrote:

On Sun, Aug 8, 2010 at 8:59 AM, Andrei B. [email protected]
wrote:

Use

‘45 %’.sub(/%/, ‘’).strip
‘14 $’.sub(/[$]/, ‘’).strip

More universally

input_string.gsub(/\D/, ‘’)

removes any non-[0-9] characters, including white space.

I get:

tax.rb:6:in <main>': undefined method gsub’ for 0:Fixnum
(NoMethodError)

When using that code.

As for Andrei, thanks, that’s a good quick fix.

On Tue, Aug 10, 2010 at 6:51 AM, Hd Pwnz0r
[email protected] wrote:

input_string.gsub(/\D/, ‘’)

tax.rb:6:in <main>': undefined method gsub’ for 0:Fixnum
(NoMethodError)

When using that code.

Yes, it works on strings – that was the problem you posed. If you
already have a number, it’s not going to include any symbols like
“$” or “%” in the first place.

or just

input_string.to_s.gsub(/\D/,‘’)
for number format permitted

2010/8/10 Hassan S. [email protected]

On Tue, Aug 10, 2010 at 6:38 PM, jason joo [email protected]
wrote:

or just

input_string.to_s.gsub(/\D/,‘’)
for number format permitted

Depending on what your actual numeric use case is :slight_smile:

$ irb

input = 9
=> 9
input.to_s.gsub(/\D/,‘’)
=> “9”
input = 9.095
=> 9.095
input.to_s.gsub(/\D/,‘’)
=> “9095”

aha, i forgot positive number and dot. then the regular expression
should
be /([-+]?\d*[.]?\d*)/

eg

if input_string =~ /([-+]?\d*[.]?\d*)/
input_string = $1
else
#have no number part
input_string = 0
end

9 => “9”
-9 => “-9”
-9.098 => “-9.098”

2010/8/11 Hassan S. [email protected]

At 2010-08-11 01:03AM, “jason joo” wrote:

[Note: parts of this message were removed to make it a legal post.]

aha, i forgot positive number and dot. then the regular expression should
be /([-+]?\d*[.]?\d*)/

The empty string matches that pattern (all your quantifiers allow zero
of the previous item). You want:

/[-+]?(?:\d+(\.\d*)?)|(?:\d*\.\d+)/

where there must be at least one digit.