我在Python中有一个包含浮点数的变量(例如num = 24654.123
),我想确定这个数字的精度和小数位数(在Oracle意义上),所以123.45678应该给我(8,5),12.76应该给我(4,2)等等
我最初考虑使用字符串表示法(通过str
或repr
),但是对于大的数字,这些表示法失败了(尽管我现在明白了,这里的问题是浮点表示法的局限性):
>>> num = 1234567890.0987654321
>>> str(num) = 1234567890.1
>>> repr(num) = 1234567890.0987654
编辑:
下面是好的观点。我应该澄清一下。该数字已经是浮点数,正在通过cx_Oracle推送到数据库。我在Python中尽我所能处理那些对于相应的数据库类型来说太大的浮动,而没有执行INSERT和处理Oracle错误(因为我想一次处理一个字段而不是一个记录的数字)。我想map(len, repr(num).split('.'))
是最接近浮子精度和刻度的?
很容易得到小数点左边的位数:
由于浮点值固有的不精确性,小数点右边的位数比较复杂。我还需要几分钟才能弄清楚。
编辑:基于这一原则,下面是完整的代码。
我认为您应该考虑使用decimal类型,而不是
float
。类型float
将给出舍入错误,因为数字在内部以二进制表示,但许多十进制数字没有精确的二进制表示。不能使用浮点变量。例如,键入
给出:
因此,要从中得到6,4,您必须找到一种方法来区分输入
10.2345
和10.234500000000001
的用户,这是不可能使用float的。这与浮点数的存储方式有关。使用decimal
。相关问题 更多 >
编程相关推荐