Umwandlung von Zahl in wissenschaftlicher notation int
Könnte mir jemand erklären, warum ich nicht verwenden kann int()
zum konvertieren einer integer-Zahl dargestellt mit der string-wissenschaftliche notation in python int
?
Zum Beispiel funktioniert nicht:
print int('1e1')
Aber das bedeutet:
print int(float('1e1'))
print int(1e1) # Works
Warum int
nicht erkennen der Zeichenfolge als integer? Sicher ist es so einfach wie die überprüfung der Vorzeichen der exponent?
- Aus dem gleichen Grund, dass
int()
die nicht funktioniert, sagen,'1.0'
: es ist beabsichtigt, für Ganzzahlen. - Was denkst du, was passieren würde, mit
int('hello world')
? Es schlägt fehl, für die exakt gleiche Grund, dieint('1e1')
tut -int()
analysiert integer-Zeichenfolgen, wie es auf dem zinn sagt. int('1e1')
funktioniert nicht.float('1e1')
funktioniert. Was sagt Euch das?- 1e1 ist ein integer! Es ist die Nummer 10. Ich wollte nur wissen, warum Sie zu interpretieren ist ein string, der es wie ein Schwimmer, um zu realisieren, es ist eine ganze Zahl.
- Nein, es ist nicht. Setzen
1e1
in einem interpreter und beobachten Sie es zurück10.0
. Wenn das nicht sagen, "float", versuchen Sie dochtype(1e1)
und beobachten Sie es zurück<class 'float'>
. Natürlich, die Tatsache, dass nurfloat()
, und nichtint()
könnte analysiert die Zeichenfolge'1e1'
ist ein gutes Indiz dafür, wie gut. - Python stellt 1e1 wie ein Schwimmer, aber im mathematischen Sinn ist es eine Ganzzahl ist. 1e1 10
- Sie hat Ihre Frage mit
python
, nichtmath
. Wenn Sie versuchen, zu schreiben, Python-code, basierend auf Regeln, die natürlich nicht für Python, werden Sie stoßen auf viele Schwierigkeiten. - Die Frage ist: warum, wenn Python behandelt ints als Schwimmer (numerisch Hierarchie)... tut es nicht behandeln, ein klares int als int. Wie machst du eine int das ist 1e100? Versuchen Sie es. In Python Ist3. Spaß. 1e1000? Rechts aus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinter die kulissen einer wissenschaftlichen Reihe-notation wird immer dargestellt als float-intern. Der Grund liegt in der unterschiedlichen Zahlenbereich als integer nur Karten auf einen festen Wertebereich, sagen wir mal
2^32
Werte. Die wissenschaftliche Darstellung ist ähnlich wie die floating-Darstellung mit deutlichen und exponent. Weitere details können Sie lookup in https://en.wikipedia.org/wiki/Floating_point.Können Sie werfen einen wissenschaftlichen Zahlendarstellung als string zu integer-direkt.
Funktioniert, weil
1e1
als Zahl ist schon ein float.Zurück zu deiner Frage: Wir wollen zu bekommen eine ganze Zahl von float oder wissenschaftliche string. Details: https://docs.python.org/2/reference/lexical_analysis.html#integers
Für float-oder wissenschaftliche Darstellungen, verwenden Sie den Zwischenschritt über
float
.int()
.int('13.37')
.float
.int
mit der wissenschaftlichen Darstellung.<type 'long'>
docs.python.org/2/reference/lexical_analysis.html#integersWeil in Python (zumindest in der 2.x da ich nicht mit Python 3.x)Wenn Sie die Eingabe ein string ist, dann python wird versuchen zu analysieren, es zu Basis 10int()
verhält sich anders auf Zeichenfolgen und numerische Werte.int
Aber wenn Sie die Eingabe einer gültigen numerischen Wert,
dann python interpretiert es nach seinen Basis und die Art und konvertieren Sie Sie zur Basis 10 int.dann python wird zunächst interperet077
als Basis 8 und konvertieren Sie Sie zur Basis 10, dannint()
wird einfach anzuzeigen.So,
int('1e1')
werden versuchen, Sie zu analysieren1e1
als base-10-string und wirftValueError
. Aber1e1
ist ein numerischer Wert (mathematischer Ausdruck):SoPython So wird der erste interpret 1e1, da es ein numric Wert und bewertenint
behandeln es als einen numerischen Wert ein und behandeln Sie, als ob, konvertierenfloat(10.0)
und dann analysieren es auf int.10.0
undint()
wird es konvertieren zu integer.So aufrufen
int()
mit einem string-Wert, Sie müssen sicher sein, dass string eine gültige Basis 10 integer-Wert.int()
) nicht wirklich was zu tun mit Python 2 vs 3...