如何获得[-2.3,-2.2,...]的列表?

use*_*361 1 python floating-point list-comprehension

我想得到一个数字列表,如[-2.3,-2.2,...,0.2]in Python.但是,尝试:

[float(i)/10 for i in range(-23,2)] 
Run Code Online (Sandbox Code Playgroud)

将返回 [-2.2999999999999998, -2.2000000000000002, -2.1000000000000001, -2.0, -1.8999999999999999, -1.8, -1.7, -1.6000000000000001, -1.5, -1.3999999999999999, -1.3, -1.2, -1.1000000000000001, -1.0, -0.90000000000000002, -0.80000000000000004, -0.69999999999999996, -0.59999999999999998, -0.5, -0.40000000000000002, -0.29999999999999999, -0.20000000000000001, -0.10000000000000001, 0.0]

我该如何解决?

回合不起作用:

>>> round(float(-23)/float(10),3)
-2.2999999999999998
Run Code Online (Sandbox Code Playgroud)

这是为了最终写入CSV或通过main方法传递给另一种语言.

Bur*_*lid 5

请不要混淆当打印时应该看起来的样子与它应该表示的价值.

打印绝不是问题:

>>> ['{0:.1f}'.format(float(i)/10) for i in range(-23,3)]
['-2.3', '-2.2', '-2.1', '-2.0', '-1.9', '-1.8', '-1.7', '-1.6', '-1.5', '-1.4', '-1.3', '-1.2', '-1.1', '-1.0', '-0.9', '-0.8', '-0.7', '-0.6', '-0.5', '-0.4', '-0.3', '-0.2', '-0.1', '0.0', '0.1', '0.2']
Run Code Online (Sandbox Code Playgroud)

但这些是字符串,因为这是他们的印刷表现.在进行计算时,需要浮点表示并不精确; 正如@mitnk指出的那样; 并且正如@ 6502所解释的那样.

您还可以使用该decimal模块,该模块提供更加人性化的浮点数表示.