# Copyright (C) 2004 Marc O. Sandlus # Homepage: http://www.matheraum.de/werkzeuge # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import mrhtmlhelper werkzeugid = "zahlensysteme" author = "Marc O. Sandlus" licence = "GNU General Public License" username = "Marc" def webform( reqform, results=0 ): form = { 'input':'', 'von':'basis10', 'nach':'' } form.update( reqform ) res = { 'title':'Zahlensystem-Wandler' } s = "" s += '''
Stellt die einzugebende Dezimalzahl in verschiedenen Zahlensystemen dar, z.B. Binär-, Oktal-, Hexadezimal, 20-er System. Außerdem erfolgt eine Darstellung der Zahl in Worten (englisch, französisch, deutsch) und in römischen Ziffern.
''' s += '\n' if results and form[ 'input' ].strip(): dezimalzahl = form[ 'input' ] if form[ 'nach' ]: zahlensysteme_nach = form[ 'nach' ] if zahlensysteme_nach.find( 'basis' ) == 0: s += dez_to_basis( dezimalzahl, int( zahlensysteme_nach[5:] ) )[0] else: s += 'Klicke auf die einzelnen Ergebnisse für die Anzeige des Rechenweges!
\n' s += 'Arabische Ziffern: | %s |
In Worten (dt.): | %s |
In Worten (schweizerisch): | %s |
In Worten (österreichisch): | %s |
In Worten (englisch/euopäisch (Chuquet)): | %s |
In Worten (englisch/euopäisch (Modified Chuquet)): | %s |
In Worten (englisch/amerikanisch): | %s |
In Worten (franz.): | %s |
In Worten (spanisch): | %s |
In Worten (lateinisch): | %s |
Römische Ziffern: | %s |
%s: | %s |
Quellen: English-language Numerals
' res.update( { 'html':s } ) return res ####################################################### def filter_alphabet( s, alpha ): t = "" for c in s: if c in alpha: t += c return t def verschiebe_komma( vorkomma, nachkomma, stellen ): if stellen > 0: # verschiebe nach rechts stellen = min( 1000, stellen ) nachkomma += '0' * stellen vorkomma += nachkomma[:stellen] nachkomma = nachkomma[stellen:].rstrip( '0' ) elif stellen < 0: # verschiebe nach links stellen = max( -1000, stellen ) vorkomma = '0' * abs(stellen) + vorkomma nachkomma = vorkomma[stellen:] + nachkomma vorkomma = vorkomma[:stellen].lstrip( '0' ) return vorkomma, nachkomma def dez_prepare( dez ): vorkomma = nachkomma = dezabs = dezvor = "" if type( dez ) != type( "" ): dez = "%s" % dez dez = dez.replace( '*10^', 'e' ) dez = filter_alphabet( dez.lower(), '+-,0123456789e' ) if dez: if dez[0] == '-': dezabs = dez[1:] dezvor = '-' elif dez[0] == '+': dezabs = dez[1:] dezvor = '+' else: dezabs = dez dezvor = '' epos = dezabs.rfind( 'e' ) if epos > -1: mantisse = long( dezabs[ epos+1: ] ) dezabs = dezabs[:epos] else: mantisse = 0 komma = dezabs.rfind( ',' ) if komma > -1: vorkomma = dezabs[:komma] nachkomma = dezabs[komma+1:] if vorkomma == "": vorkomma = '0' else: vorkomma = dezabs nachkomma = "" # + - , e aus vorkomma filtern vorkomma = filter_alphabet( vorkomma, '0123456789' ).lstrip( '0' ) nachkomme = filter_alphabet( nachkomma, '0123456789' ).rstrip( '0' ) vorkomma, nachkomma = verschiebe_komma( vorkomma, nachkomma, mantisse ) if not vorkomma: vorkomma = '0' return dezvor, vorkomma, nachkomma, dezabs def dez_to_roemisch( dez ): res = "" dezvor, vorkomma, nachkomma, dezabs = dez_prepare( dez ) if not vorkomma: return res if dezvor == '-': return "[negative Zahlen sind nicht darstellbar]" if nachkomma: return "[Zahlen mit Nachkommastellen sind nicht darstellbar]" if len( vorkomma ) > 4: return "[Noch nicht implementiert]" if len( vorkomma ) > 6: return "[Zahl zu groß]" dez = long( vorkomma ) werte = [ 1000, 500, 100, 50, 10, 5, 1 ] ziffern = { 1000:'M', 500:'D', 100:'C', 50:'L', 10:'X', 5:'V', 1:'I' } res = "" for wert in werte: while dez >= wert: res = "%s%s" % ( res, ziffern[ wert ] ) dez -= wert res = res.replace( 'DCCCC', 'CM' ).replace( 'CCCC', 'CD' ) res = res.replace( 'LXXXX', 'XC' ).replace( 'XXXX', 'XL' ) res = res.replace( 'VIIII', 'IX' ).replace( 'IIII', 'IV' ) return res def dez_to_dez_de( dez ): res = "" dezvor, vorkomma, nachkomma, dezabs = dez_prepare( dez ) if not dezabs: return res ganzet = "" while len( vorkomma ) > 3: ganzet = "%s.%s" % ( vorkomma[-3:], ganzet ) vorkomma = vorkomma[:-3] ganzet = ( "%s.%s" % ( vorkomma, ganzet ) ).rstrip( '.' ) res = "%s%s%s%s" % ( dezvor, ganzet, ','*(nachkomma!=""), nachkomma ) return res def dez_to_words_lt( dez, zusammengesetzt=0 ): einser = [ '???', 'unus', 'duo', 'tres', 'quattuor', 'quinque', 'sex', 'septem', 'octo', 'novem', 'decem', 'undecim', 'duodecim', 'tredecim', 'quattuordecim', 'quindecim', 'sedecim', 'septendecim', 'duodeviginti', 'undeviginti' ] einser_zusammengesetzt1 = einser[:] einser_zusammengesetzt1[1] = 'ein' einser_zusammengesetzt2 = einser[:] einser_zusammengesetzt2[1] = 'eine' if zusammengesetzt == 1: einser = einser_zusammengesetzt1 elif zusammengesetzt == 2: einser = einser_zusammengesetzt2 zehner = [ 'null', 'decem', 'viginti', 'dreißig', 'vierzig', 'fünfzig', 'sechzig', 'siebzig', 'achtzig', 'neunzig' ] tausenderpotenzen = [ 'null', 'tausend', 'Million', 'Milliarde', 'Billion', 'Billiarde', 'Trillion', 'Trilliarde', 'Quadrillion', 'Quadrilliarde', 'Quintillion', 'Quintilliarde', 'Sextillion','Sextilliarde', 'Septillion','Septilliarde', 'Oktillion','Oktilliarde', 'Nonillion','Nonilliarde', 'Dekillion','Dekilliarde', 'Undekillion','Undekilliarde', 'Duodekillion','Duodekilliarde', 'Tredekillion','Tredekilliarde', 'Quattuordekillion','Quattuordekilliarde', 'Quindekillion','Quindekilliarde', 'Sexdekillion','Sexdekilliarde', 'Septendekillion','Septendekilliarde', 'Octodekillion','Octodekilliarde', 'Novemdekillion','Novemdekilliarde', 'Vigintillion','Vigintilliarde', 'Unvigintillion','Unvigintilliarde', 'Duovigintillion','Duovigintilliarde', 'Trevigintillion','Trevigintilliarde', 'Quattuorvigintillion','Quattuorvigintilliarde', 'Quinvigintillion','Quinvigintilliarde', 'Sexvigintillion','Sexvigintilliarde', 'Septenvigintillion','Septenvigintilliarde', 'Octovigintillion','Octovigintilliarde', 'Novemvigintillion','Novemvigintilliarde', 'Trigintillion','Trigintilliarde', ] res = "" dezvor, vorkomma, nachkomma, dezabs = dez_prepare( dez ) if not dezabs: return res if dezvor == '-': res += 'minus ' elif dezvor == '+': res += 'plus ' if ( len( vorkomma ) <= 2 ) and ( int( vorkomma ) <= 19 ): res += einser[ int( vorkomma ) ] elif len( vorkomma ) <= 2: if vorkomma[-1] == '0': res += zehner[ int( vorkomma[-2] ) ] else: res += dez_to_words_de( vorkomma[-1], zusammengesetzt=1 ) + 'und' + zehner[ int( vorkomma[-2] ) ] elif len( vorkomma ) <= 3: res += dez_to_words_de( vorkomma[:-2], zusammengesetzt=1 ) + 'hundert' if vorkomma[-2:] != '00': res += dez_to_words_de( int( vorkomma[-2:] ) ) elif len( vorkomma ) <= 6: res += dez_to_words_de( vorkomma[:-3], zusammengesetzt=1 ) + 'tausend' if vorkomma[-3:] != '000': res += dez_to_words_de( vorkomma[-3:] ) else: #7 8 9 => 2 #10 11 12 => 3 tp = ( len( vorkomma )-1 ) / 3 res += dez_to_words_de( vorkomma[:-tp*3], zusammengesetzt=2 ) + ' ' + tausenderpotenzen[ tp ] if vorkomma[0] != '1' or ( len( vorkomma ) > tp*3+1 ): if res[-1] == 'e': res += 'n' else: res += 'en' if vorkomma[-tp*3:] != '0'*tp*3: res += ' ' + dez_to_words_de( vorkomma[-tp*3:] ) if nachkomma: if vorkomma == "": res += 'null' res += ' Komma ' for d in nachkomma: res += "%s " % einser[ int( d ) ] res = res[:-1] return res def dez_to_words_fr( dez, zusammengesetzt=0 ): einser = [ 'zéro', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', "huit", 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf' ] zehner = [ 'zéro', 'dix', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingt', 'quatre-vingt-dix' ] tausenderpotenzen = [ 'null', 'tausend', 'million', 'milliard', 'billion', 'billiard', 'trillion', 'trilliard', 'quadrillion', 'quadrilliard', 'quintillion', 'quintilliard', 'sextillion','sextilliard', 'septillion','septilliard', 'octillion','octilliard', 'nonillion','nonilliard', 'decillion','decilliard', 'undecillion','undecilliard', 'duodecillion','duodecilliard', 'tredecillion','tredecilliard', 'quattuordecillion','quattuordecilliard', 'quindecillion','quindecilliard', 'sexdecillion','sexdecilliard', 'septendecillion','septendecilliard', 'octodecillion','octodecilliard', 'novemdecillion','novemdecilliard', 'vigintillion','vigintilliard', 'unvigintillion','unvigintilliard', 'duovigintillion','duovigintilliard', 'trevigintillion','trevigintilliard', 'quattuorvigintillion','quattuorvigintilliard', 'quinvigintillion','quinvigintilliard', 'sexvigintillion','sexvigintilliard', 'septenvigintillion','qeptenvigintilliard', 'octovigintillion','octovigintilliard', 'novemvigintillion','novemvigintilliard', 'trigintillion','trigintilliard', ] res = "" dezvor, vorkomma, nachkomma, dezabs = dez_prepare( dez ) if not dezabs: return res if dezvor == '-': res += 'moins ' elif dezvor == '+': res += 'plus ' if ( len( vorkomma ) <= 2 ) and ( int( vorkomma ) <= 19 ): res += einser[ int( vorkomma ) ] elif len( vorkomma ) <= 2: if int( vorkomma ) <= 70: if vorkomma[-1] == '0': res += zehner[ int( vorkomma[-2] ) ] elif vorkomma[-1] == '1': res += zehner[ int( vorkomma[-2] ) ] + ' et un' else: res += zehner[ int( vorkomma[-2] ) ] + '-' + dez_to_words_fr( vorkomma[-1], zusammengesetzt=1 ) else: if vorkomma[-1] == '0': res += zehner[ int( vorkomma[-2] ) ] else: z = { '7': 6, '8':8, '9':8 }[ vorkomma[-2] ] e = int( vorkomma[-1] ) if vorkomma[-2] in [ '7', '9' ]: e += 10 if vorkomma[-2:] == '71': res += zehner[ z ] + ' et ' + dez_to_words_fr( e, zusammengesetzt=1 ) else: res += zehner[ z ] + '-' + dez_to_words_fr( e, zusammengesetzt=1 ) elif len( vorkomma ) <= 3: if vorkomma[0] == '1': res += 'cent' else: res += dez_to_words_fr( vorkomma[:-2], zusammengesetzt=1 ) + ' cent' if vorkomma[-2:] != '00': res += ' ' + dez_to_words_fr( int( vorkomma[-2:] ) ) else: if vorkomma[0] != '1' and ( vorkomma[-2:] == '00' ): res += 's' # cents elif len( vorkomma ) <= 4: if vorkomma[:2] == '10': # 1000 bis 1099 res += 'mille' if vorkomma[-3:] != '000': res += ' ' + dez_to_words_fr( vorkomma[-2:] ) elif vorkomma[0] == '1': # 1100 bis 1999 res += dez_to_words_fr( vorkomma[:2], zusammengesetzt=1 ) + ' cent' if vorkomma[-2:] == '00': res += 's' # 1100, 1200, 1300,..., 1900: cents if vorkomma[-2:] != '00': res += ' ' + dez_to_words_fr( vorkomma[-2:] ) else: res += dez_to_words_fr( vorkomma[:1], zusammengesetzt=1 ) + ' mille' if vorkomma[-3:] != '000': res += ' ' + dez_to_words_fr( vorkomma[-3:] ) elif len( vorkomma ) <= 6: res += dez_to_words_fr( vorkomma[:-3], zusammengesetzt=1 ) + ' mille' if vorkomma[-3:] != '000': res += ' ' + dez_to_words_fr( vorkomma[-3:] ) else: #7 8 9 => 2 #10 11 12 => 3 tp = ( len( vorkomma )-1 ) / 3 res += dez_to_words_fr( vorkomma[:-tp*3], zusammengesetzt=2 ) + ' ' + tausenderpotenzen[ tp ] if vorkomma[0] != '1' or ( len( vorkomma ) > tp*3+1 ): res += 's' if vorkomma[-tp*3:] != '0'*tp*3: res += ' ' + dez_to_words_fr( vorkomma[-tp*3:] ) if nachkomma: if vorkomma == "": res += 'null' res += ' virgule ' for d in nachkomma: res += "%s " % einser[ int( d ) ] res = res[:-1] return res def dez_to_words_de( dez, zusammengesetzt=0 ): einser = [ 'null', 'eins', 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun', 'zehn', 'elf', 'zwölf', 'dreizehn', 'vierzehn', 'fünfzehn', 'sechzehn', 'siebzehn', 'achtzehn', 'neunzehn' ] einser_zusammengesetzt1 = einser[:] einser_zusammengesetzt1[1] = 'ein' einser_zusammengesetzt2 = einser[:] einser_zusammengesetzt2[1] = 'eine' if zusammengesetzt == 1: einser = einser_zusammengesetzt1 elif zusammengesetzt == 2: einser = einser_zusammengesetzt2 zehner = [ 'null', 'zehn', 'zwanzig', 'dreißig', 'vierzig', 'fünfzig', 'sechzig', 'siebzig', 'achtzig', 'neunzig' ] tausenderpotenzen = [ 'null', 'tausend', 'Million', 'Milliarde', 'Billion', 'Billiarde', 'Trillion', 'Trilliarde', 'Quadrillion', 'Quadrilliarde', 'Quintillion', 'Quintilliarde', 'Sextillion','Sextilliarde', 'Septillion','Septilliarde', 'Oktillion','Oktilliarde', 'Nonillion','Nonilliarde', 'Dekillion','Dekilliarde', 'Undekillion','Undekilliarde', 'Duodekillion','Duodekilliarde', 'Tredekillion','Tredekilliarde', 'Quattuordekillion','Quattuordekilliarde', 'Quindekillion','Quindekilliarde', 'Sexdekillion','Sexdekilliarde', 'Septendekillion','Septendekilliarde', 'Octodekillion','Octodekilliarde', 'Novemdekillion','Novemdekilliarde', 'Vigintillion','Vigintilliarde', 'Unvigintillion','Unvigintilliarde', 'Duovigintillion','Duovigintilliarde', 'Trevigintillion','Trevigintilliarde', 'Quattuorvigintillion','Quattuorvigintilliarde', 'Quinvigintillion','Quinvigintilliarde', 'Sexvigintillion','Sexvigintilliarde', 'Septenvigintillion','Septenvigintilliarde', 'Octovigintillion','Octovigintilliarde', 'Novemvigintillion','Novemvigintilliarde', 'Trigintillion','Trigintilliarde', ] res = "" dezvor, vorkomma, nachkomma, dezabs = dez_prepare( dez ) if not dezabs: return res if dezvor == '-': res += 'minus ' elif dezvor == '+': res += 'plus ' if ( len( vorkomma ) <= 2 ) and ( int( vorkomma ) <= 19 ): res += einser[ int( vorkomma ) ] elif len( vorkomma ) <= 2: if vorkomma[-1] == '0': res += zehner[ int( vorkomma[-2] ) ] else: res += dez_to_words_de( vorkomma[-1], zusammengesetzt=1 ) + 'und' + zehner[ int( vorkomma[-2] ) ] elif len( vorkomma ) <= 3: res += dez_to_words_de( vorkomma[:-2], zusammengesetzt=1 ) + 'hundert' if vorkomma[-2:] != '00': res += dez_to_words_de( int( vorkomma[-2:] ) ) elif len( vorkomma ) <= 6: res += dez_to_words_de( vorkomma[:-3], zusammengesetzt=1 ) + 'tausend' if vorkomma[-3:] != '000': res += dez_to_words_de( vorkomma[-3:] ) else: #7 8 9 => 2 #10 11 12 => 3 tp = ( len( vorkomma )-1 ) / 3 res += dez_to_words_de( vorkomma[:-tp*3], zusammengesetzt=2 ) + ' ' + tausenderpotenzen[ tp ] if vorkomma[0] != '1' or ( len( vorkomma ) > tp*3+1 ): if res[-1] == 'e': res += 'n' else: res += 'en' if vorkomma[-tp*3:] != '0'*tp*3: res += ' ' + dez_to_words_de( vorkomma[-tp*3:] ) if nachkomma: if vorkomma == "": res += 'null' res += ' Komma ' for d in nachkomma: res += "%s " % einser[ int( d ) ] res = res[:-1] return res def dez_to_words_en( dez, zusammengesetzt=0, system='chuquet' ): einser = [ 'null', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen' ] zehner = [ 'null', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety' ] if system == 'modifiedchuquet': tausenderpotenzen = [ 'null', 'thousand', 'million', 'milliard', 'billion', 'billiard', 'trillion', 'trilliard', 'quadrillion', 'quadrilliard', 'quintillion', 'quintilliard', 'sextillion','sextilliard', 'septillion','septilliard', 'octillion','octilliard', 'nonillion','nonilliard', 'decillion','decilliard', 'undecillion','undecilliard', 'duodecillion','duodecilliard', 'tredecillion','tredecilliard', 'quattuordecillion','quattuordecilliard', 'quindecillion','quindecilliard', 'sexdecillion','sexdecilliard', 'septendecillion','septendecilliard', 'octodecillion','octodecilliard', 'novemdecillion','novemdecilliard', 'vigintillion','vigintilliard', 'unvigintillion','unvigintilliard', 'duovigintillion','duovigintilliard', 'trevigintillion','trevigintilliard', 'quattuorvigintillion','quattuorvigintilliard', 'quinvigintillion','quinvigintilliard', 'sexvigintillion','sexvigintilliard', 'septenvigintillion','septenvigintilliard', 'octovigintillion','octovigintilliard', 'novemvigintillion','novemvigintilliard', 'trigintillion','trigintilliard', ] elif system == 'chuquet': tausenderpotenzen = [ 'null', 'thousand', 'million', 'thousand million', 'billion', 'thousand billion', 'trillion', 'thousand trillion', 'quadrillion', 'thousand quadrillion', 'quintillion', 'thousand quintillion', 'sextillion','thousand sextillion', 'septillion','thousand septillion', 'octillion','thousand octillion', 'nonillion','thousand nonillion', 'dekillion','thousand dekillion', 'undecillion','thousand undekillion', 'duodecillion','thousand duodekillion', 'tredecillion','thousand tredekillion', 'quattuordecillion','thousand quattuordekillion', 'quindecillion','thousand quindekillion', 'sexdecillion','thousand sexdekillion', 'septendecillion','thousand septendekillion', 'octodecillion','thousand octodekillion', 'novemdecillion','thousand novemdekillion', 'vigintillion','thousand vigintillion', 'unvigintillion','thousand unvigintillion', 'duovigintillion','thousand duovigintillion', 'trevigintillion','thousand trevigintillion', 'quattuorvigintillion','thousand quattuorvigintillion', 'quinvigintillion','thousand quinvigintillion', 'sexvigintillion','thousand sexvigintillion', 'septenvigintillion','thousand septenvigintillion', 'octovigintillion','thousand octovigintillion', 'novemvigintillion','thousand novemvigintillion', 'trigintillion','thousand trigintillion', ] elif system == 'american': tausenderpotenzen = [ 'null', 'thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 'sextillion', 'septillion', 'octillion', 'nonillion', 'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quattuordecillion', 'quindecillion', 'sexdecillion', 'septendecillion', 'octodecillion', 'novemdecillion', 'vigintillion', 'unvigintillion', 'duovigintillion', 'trevigintillion', 'quattuorvigintillion', 'quinvigintillion', 'sexvigintillion', 'septenvigintillion', 'octovigintillion', 'novemvigintillion', 'trigintillion', 'untrigintillion', 'duotrigintillion', 'tretrigintillion', 'quattuortrigintillion', 'quintrigintillon', 'sextrigintillion', 'septentrigintillion', 'octotrigintillion', 'novemtrigintillion', 'quadragintillion', 'unquadragintillion', 'duoquadragintillion', 'trequadragintillion', 'quattuorquadragintillion', 'quinquadragintillion', 'sexquadragintillion', 'septenquadragintillion', 'octoquadragintillion', 'novemquadragintillion', 'quinquagintillion', 'unquinquagintillion', 'duoquinquagintillion', 'trequinquagintillion', 'quattuorquinquagintillion', 'quinquinquagintillion', 'sexquinquagintillion', 'septenquinquagintillion', 'octoquinquagintillion', 'novemquinquagintillion', ] res = "" dezvor, vorkomma, nachkomma, dezabs = dez_prepare( dez ) if not dezabs: return res if dezvor == '-': res += 'minus ' elif dezvor == '+': res += 'plus ' if ( len( vorkomma ) <= 2 ) and ( int( vorkomma ) <= 19 ): res += einser[ int( vorkomma ) ] elif len( vorkomma ) <= 2: if vorkomma[-1] == '0': res += zehner[ int( vorkomma[-2] ) ] else: #res += dez_to_words_en( vorkomma[-1], zusammengesetzt=1 ) + ' and ' + zehner[ int( vorkomma[-2] ) ] res += zehner[ int( vorkomma[-2] ) ] + '-' + dez_to_words_en( vorkomma[-1], zusammengesetzt=1, system=system ) elif len( vorkomma ) <= 3: res += dez_to_words_en( vorkomma[:-2], zusammengesetzt=1, system=system ) + ' hundred ' if vorkomma[-2:] != '00': res += ' and ' + dez_to_words_en( int( vorkomma[-2:] ), system=system ) elif len( vorkomma ) <= 6: res += dez_to_words_en( vorkomma[:-3], zusammengesetzt=1, system=system ) + ' thousand' if vorkomma[-3:] != '000': if zusammengesetzt: res += ',' res += " " + dez_to_words_en( vorkomma[-3:], system=system ) else: #7 8 9 => 2 #10 11 12 => 3 tp = ( len( vorkomma )-1 ) / 3 res += dez_to_words_en( vorkomma[:-tp*3], zusammengesetzt=2, system=system ) + ' ' + tausenderpotenzen[ tp ] if vorkomma[-tp*3:] != '0'*tp*3: res += ', ' + dez_to_words_en( vorkomma[-tp*3:], zusammengesetzt=1, system=system ) if nachkomma: if vorkomma == "": res += 'null' res += ' point ' for d in nachkomma: res += "%s " % einser[ int( d ) ] res = res[:-1] return res def dez_to_basis( dez, basis ): dezvor, vorkomma, nachkomma, dezabs = dez_prepare( dez ) basis = abs( long( basis ) ) # TODO dez < 0 # TODO basis > 10 ziffern = [ '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' ] if nachkomma: return ( '[Zahlen mit Nachkommastellen sind nicht implementiert]', ) * 3 if dezvor == '-': return ( '[negative Zahlen sind nicht implementiert]', ) * 3 try: vorkomma = long( vorkomma ) except: res = '[Zahl zu groß]' return ( res, ) * 3 w = x = l = "" if vorkomma == 0: l = "0" elif vorkomma > 0: w += '%s. Schritt: | Rechne %s : %s | = %s Rest %s | => %s ist die %s. Ziffer | Zwischenergebnis: | %s%s |
Hier endet das Verfahren, da das ganzzahlige Ergebnis der letzten Division 0 ist.
" w += 'Das Ergebnis ist %s.
' % l if basis <= 16: w += 'Probe:
' w += '%s%s
=' % ( l, basis )
if l:
for n in range( len( l ) ):
w += '%s·%s%s +' % ( ziffern.index( l[ n ] ), basis, len(l)-n-1 )
w = w[:-2]
w += '
= '
for n in range( len( l ) ):
w += '%s·%s +' % ( ziffern.index( l[ n ] ), basis**(len(l)-n-1) )
w = w[:-2]
w += '
= '
for n in range( len( l ) ):
w += '%s +' % ( ziffern.index( l[ n ] )*basis**(len(l)-n-1) )
w = w[:-2]
w += '
= %s10' % dezabs
w += '