Shawn Gordon
Shawn Gordon

Reputation: 173

Python Math - Floating with financial output comes out incorrect

In a small portion of code for a retail auditing calculator, I'm attempting to allow the input of a retail value and multiply it by up to 2 entered quantities The expected (intended) result is $X*Y=$Z.

I've attempted to modify the code a couple of says and seem to be stuck on how this math is (isn't) working correctly.

I've attempted a number of different configurations in the code and the most I've achieved is the following:

#Retail value of item, whole number (i.e. $49.99 entered as 4999)
rtlVAL = input("Retail Value: ")

#Quantity of Items - can be multiplied for full stack items, default if no entry is '1'
qt1 = float(input("Quantity 1: ")) #ex. 4
qt2 = float(input("Quantity 2: ") or "1") #ex " "

#Convert the Retail Value to finacial format (i.e 4999 to $49.99)
rtl = float("{:.2}".format (rtlVAL))

# Screen Output
qtyVAL = int(qt1)*int(qt2)
print("$" + str(qtyVAL*rtl))

The entered values are: Retail Value: 4999 Quantity 1: 4 Quantity 2: (blank)

The expected performance is 4999 * 4 * (because no entry defaults to value of 1) and the expected result is $199.96

The result of this code is $196.0, so not only is it the wrong conclusion but it's missing the two decimal places.

I'm not entirely certain why the math comes up wrong in context to expectation.

What am I missing here?


On line 9, I've tried the following:

rtl = float("{:.2f}".format (rtlVAL))

rtl = int("{:.2f}".format (rtlVAL))

The return was

ValueError: Unknown format code 'f' for object of type 'str'

if I change line 13 to:

print("$" + float(qtyVAL*rtl))

I get

TypeError: must be str, not float

using either of the prior alterations in conjunction with the latter will return the ValueError:


Python 3.4 and 3.6

I did search a few other SO questions regarding Python, Math, Floating point, and formatting but the questions were looking for and presenting something far more advances and entangled than this so i wasn't able to glean an answer to make a contextual application or it applied mainly to Python 2.7 wherein some of the code such as raw input() is simply input() and altered by int(input())in Python 3.x to step out of str value (as far as I understand for this purpose.

I did not see this as a duplicate, but if I missed something in that I do apologize - it isn't intentional.

Upvotes: 0

Views: 127

Answers (1)

MrB
MrB

Reputation: 818

No need to mess around with number formats:

rtl = float(rtlVAL)/100

Just divide the retail value by 100 to get the dollar value

EDIT:

Incidentally, the reason it was coming up with 196 was because your number format was taking the first two digits of rtlVAL - 49 in your case - and then multiplying by that.

Upvotes: 1

Related Questions