Sto cercando di scrivere un programma che chiede all'utente un numero decimale e quindi calcola la somma delle sue cifre. per esempio se il numero è 123.25 allora la somma sarà 1 + 2 + 3 + 2 + 5 = 13.
Ho deciso di trasformare prima il numero in 0.12325 (qualsiasi numero verrà formattato in questo modo ma sto usando l'esempio) e quindi spostare il punto decimale a destra in un punto e isolare le cifre una alla volta.
ecco cosa ho ottenuto (l'ho provato in python e c ++ ho lo stesso problema in entrambi):
number = float(raw_input ("please enter a Decimal number: "))
total = 0
while number >= 1:
number = number / 10 ## turning 123.25 to 0.12325
while number > 0:
number = number * 10 ## making 0.12325 to 1.2325
total = total + int(number) ## storing the digit on the left of the decimal point
number = number - int (number) ## getting rid of the digit left to the decimal point
print total
Il problema è che tutto funziona fino all'ultima cifra. Quando arriva al punto in cui è 5.0 rispetto all'istruzione numero = numero - int (numero) mi dà 1 anziché zero. Dovrebbe essere 5.0 - 5 = 0 ma non lo è.
Questo è quello che ottengo quando stampo il numero in ogni fase:
please enter a Decimal number: 123.25 0.12325 0.2325 0.325 0.25 0.5 ##### Here is where the problem starts ##### 0.999999999999 0.999999999993 0.999999999929 ..... here it goes on for a while. I spared you the rest .....
Più precisamente, ho stampato il numero in ogni fase del ciclo:
please enter a Decimal number: 123.25 number at start of loop: 0.12325 number after 'number * 10' : 1.2325 number at the end of the loop: 0.2325 number at start of loop: 0.2325 number after 'number * 10' : 2.325 number at the end of the loop: 0.325 number at start of loop: 0.325 number after 'number * 10' : 3.25 number at the end of the loop: 0.25 number at start of loop: 0.25 number after 'number * 10' : 2.5 number at the end of the loop: 0.5 number at start of loop: 0.5 number after 'number * 10' : 5.0 number at the end of the loop: 0.999999999999
Tutto ad un tratto smette di essere accurato.