2014-11-10 3 views
1

Я написал трансформатор для десятичных чисел в другой системе чисел. Число, оставшееся до запятой, справа, но десятичное место после запятой ложно. Я буду Poste мой код, но переменные на немецком языке, поэтому я надеюсь, что вы можете прочитать ихпроблемы с python с десятичной точкой

здесь IST код не осталось запятой (без ошибки)

print "decimal numbers to another number system between [2-9]\n" 
 
decimal = float(raw_input("put in a float: ")) 
 
base = int(raw_input("base: ")) 
 

 
#declaration for first part 
 
decimalnew = decimal # we need this var for the second part 
 
result = 0 
 
number = int(decimal)/1 
 
factor = 1 
 

 

 
# first part for integers decimal is always an integer (this part is ok) 
 
while (decimal): 
 
\t leftover = int(decimal) % base 
 
\t decimal = int(decimal)/base 
 
\t 
 
\t factor *= 10 
 
\t result = result + leftover * factor 
 

 
#declaration for second part 
 
decimalnew = decimalnew - number 
 
result2 = 0 
 
factor2 = 1 
 

 
# second part for floats always < 1 (f.e. 0.2) 
 

 

 
# i think in this part is the mistake 
 
while (decimalnew > 0): 
 
\t leftover2 = decimalnew * base 
 
\t decimalnew = decimalnew * base 
 
\t if (decimalnew > 0): 
 
\t \t decimalnew = decimalnew - leftover2 \t 
 
\t factor2 = factor2 * 10 
 
\t result2 = result2 + leftover2/factor2 
 

 
# results from the first part and the second part 
 
finalresult = result + result2 
 

 

 
print "eingegebene Zahl", number, "- neue Zahl mit der Basis %d =" % (base) , finalresult/10

+4

Я не могу читать по-немецки, и я с трудом понимание ваш вопрос. Что такое ожидаемое поведение? Что такое пример ввода? И что бы вам хотелось в качестве выхода? И что делает ваш текущий код неправильно? – CoryKramer

+0

Для чего я могу читать. Он написал программу, которая преобразует от плавающей десятичной, к плавающей * любой основе *. Неправильная часть, которая преобразуется после запятой. В принципе, '0.5_10 = 0.1_2', или так я понимаю. – Santiago

+0

Спасибо за ваш ответ. Вы хотите преобразовать десятичное число в другую систему чисел, например [binary = 2,3,4,5,6, 7, octal = 8 и 9. Я ввел число с var «dezimal» и «base «для системы чисел. Например, я помещаю номер 10, который выставляет в двоичном файле и так далее ... целые числа являются точными, но float ошибочны, например, если я поставил 10.2, вывод должен быть 1010,00110011 ... и так, но мой вывод 1010.004 или что-то подобное в двоичном коде, и вот проблема – WirJun

ответ

0

вычитание неверно. dezimalnew == rest2, если вы внимательно посмотрите на задание, то оно даст 0.

Я бы сказал, что вам, возможно, понадобится рассмотреть в целом, как конвертировать из десятичного числа с плавающей точкой в ​​любую базу. Общая идея заключается в том, что если у вас есть, например, 0,1 (плавающая часть), вы хотите продолжить умножение на базу и добавив часть INTEGER нового результата к преобразованному числу, а затем сохраните только новую десятичную часть. Например, от 0,1 до 3 дает 0.002200..., потому что: 0.1 * 3 = (0).3 * 3 = (0).9 * 3 = (2).7, 0.7 * 3 = (2).1, 0.1 * 3 = 0.3...

0

Во-первых, как вы используете только 0-9 номера, не может обработать основанием больше 10.

Но у вас есть какие-то проблемы с дробной частью. Во-первых, даже если бы это сработало, у вашего algorythme есть высокий шанс сломаться, потому что это может привести к заниженным значениям.

В качестве простого примера: 0,1 в основе 4 дает бесконечное значение: 0.0121212 ..

Таким образом, вы должны сначала добавить еще один вопрос для максимальной точности, чтобы остановить возможный бесконечный цикл, рядом с algorithme для десятичная часть должна быть переписана.

должно работать:

print "reeller Dezimal-Konvertierer\n" 
dezimal = float(raw_input("Bruchzahl eingeben: ")) 
basis = int(raw_input("Basis eingeben: ")) 
dezpos = int(raw_input("Maximal precision: ")) # don't know how to spell it in german 

dezimalneu = dezimal 
ergebnis = 0 
zahl = int(dezimal)/1 
faktor = 1 

while (dezimal): 
    rest = int(dezimal) % basis 
    dezimal = int(dezimal)/basis 

    faktor *= 10 
    ergebnis = ergebnis + rest * faktor 

dezimalneu = dezimalneu - zahl 
ergebnis2 = 0 
faktor2 = 1 

while (dezimalneu > 0) and dezpos > 0: 
    print dezimalneu 
    dezimalneu *= basis 
    faktor2 *= 10 
    i = int(dezimalneu) 
    ergebnis2 = ergebnis2 *10 + i 
    dezimalneu -= i 
    dezpos -= 1 

ergebnis2 = 1.0 * ergebnis2/faktor2 
ergebnisfinal = ergebnis + ergebnis2 

print "eingegebene Zahl", zahl, "- neue Zahl mit der Basis %d =" % (basis) , ergebnisfinal/10 

(я все немецкие имена переменных, потому что я начал писать его, прежде чем он был переведен)

+0

спасибо много чувак, извините за неудобства – WirJun

Смежные вопросы