usa tutorial sobre que para instalar index funciona elastic crear como comandos python math floating-point numbers decimal

python - tutorial - ¿Por qué float() corta los ceros finales?



todo sobre elasticsearch (3)

El código cose con éxito un gran archivo de muchos números en varios archivos de texto más pequeños con número, pero produce una peculiaridad interesante.

Todos los números deben tener cuatro decimales, como 2.7400, pero en su lugar se imprimen como 2.74.

Aquí hay un fragmento de un archivo

0.96 0.53 0.70 0.53 0.88 0.97

¿Por qué pasó esto? ¿Hay alguna manera de solucionar esto o solo una peculiaridad de float ()?

from itertools import islice def number_difference(iterable): return float(iterable[-1].strip(''/n'')) - float(iterable[0].strip(''/n'')) def file_crop(big_fname, chunk_fname, no_lines): with open(big_fname, ''r'') as big_file: big_file.readline() ifile = 0 while True: data = list(islice(big_file, no_lines)) if not data: break with open(''{}_{}.locs''.format(chunk_fname, ifile), ''w'') as small_file: offset = int(float(data[0].strip(''/n''))) map(lambda x: str(float(x.strip(''/n'')) - offset) + ''/n'', data) small_file.write(''{} {} L/n''.format(len(data), number_difference(data))) small_file.write(''''.join(map(lambda x: str(round((float(x.strip(''/n'')) - offset),4)) + ''/n'', data))) ifile += 1


Los números de coma flotante IEEE 754 (de los cuales float es binary64 ) no están diseñados para contener información de precisión. Si necesita hacerlo, debería usar decimal.Decimal en decimal.Decimal lugar.

>>> decimal.Decimal(''0.70'') Decimal(''0.70'') >>> print decimal.Decimal(''0.70'') 0.70

Vea la documentación decimal para más detalles.


Puede mantener los ceros formateando la salida:

por ejemplo: si el resultado es 0.96,

x= 0.96 "{0:.4f}".format(x)

Salida:

''0.9600''

La salida será una cadena, aunque ..

El siguiente artículo podría ser una buena lectura: https://docs.python.org/2/tutorial/floatingpoint.html

Explica por qué Python muestra flotadores en el formato anterior.


Un número de coma flotante es simplemente una aproximación en python (y otro lenguaje de programación) ... por ejemplo, un decimal se calcula como un valor binario. Es difícil encontrar los valores exactos para la mayoría de las operaciones de base 10

Después de revisar detenidamente este enlace, verá por qué Python no proporciona los valores exactos para sus operaciones convertidas en base 2

https://docs.python.org/2/tutorial/floatingpoint.html

usar la impresión también puede hacer el trabajo

print("%.4f" % 0.96) or whatever_file.write("%.4f" % 0.96)