2017-12-03 5 views
0

사용자 입력 부동 소수점에서 소수점 이하 자릿수를 계산하여 내 코드가 소수점 이하 2 자리 이하의 수를 허용하지 않도록해야합니다 (숫자는 가격이라고 가정 함). 여기 내 코드입니다 : 그것은, 노력하고 지금부터사용자 입력 플로트의 소수점 이하 자릿수를 계산하는 방법 INCLUDING 0?

 while(flag == True): 

     try: 
      price = input("Enter the price: ") 
      price = float(price) 
      flag = False 

      #price must be positive 
      if float(price) < 0: 
       print("Invalid input for the new price.") 
       flag = True 

     #check for 2 decimal places 
     decimal = str(price) 
     decimal = decimal.split(".") 
     if len(decimal[1]) != 2: 
      print("Invalid input for the new price.") 
      flag = True 

내가 마지막 소수점 자리는 0을 끝나는 모든 숫자를 수락하지 않는 몇 가지 이유를 들어 0입니다 6.50, 같은 가격을 입력하는 경우를 제외하고 소수 2 자리. 이 문제를 어떻게 해결할 수 있습니까?

+1

가격의 '유형'이란 무엇입니까? 왜 당신은 이미 문자열이어야하는 사용자 입력을 직접 확인하지 않습니까? – schwobaseggl

+0

@schwobaseggl 업데이트 된 코드보기 – gumbo1234

+0

가격을 'float'로 변환해서는 안됩니다! 부동 소수점은 연속 축척의 측정을위한 것이지만 돈은 항상 개별 단위로 측정되므로 '부동 소수점 형'은 사용하지 말고 ['decimal']을 사용해야합니다 (https://docs.python.org/3.6/library/decimal. html)을 직접 작성하십시오. –

답변

0

는 그냥 검사 역 및 변환 순서를 떠 당신은 부동 소수점 변환이 암시 적으로 '0' 스트립하는 문제가되지 않습니다 :

str(float('6.50')) 
# '6.5' 

마 STH 등이 : 떠 변환

# price = input("Enter the price: ") 
price = raw_input("Enter the price: ") # python2 
try: 
    assert len(price.split(".")[1]) == 2 
    price = float(price) 
except (AssertionError, ValueError): 
    print("Invalid input for the new price.") 
+0

6.50을 입력했을 때 가격이 잘못 입력되었습니다. 이유를 모르겠습니다. – gumbo1234

0

즉시 0을 자릅니다. 당신이 문자열을 고수 할 필요가 숫자의 오른쪽에있는 제로를 계산하려면 : 마지막에

try: 
    integer, floating = number.split(".") 
    if len(floating) != 2: raise ValuError() 
    int(integer) 
    int(floating) 
    #Or number = float(number) 
except: 
    print('fail') 

두의 int는 문자열이 참으로 플로트 있는지 확인하기 위해 정기적으로 부동 소수점 변환에 의해 대체 될 수있다.

관련 문제