我有非常不寻常的要求,但我希望有人可以提供帮助。
我将浮点数附加为numpy数组的值。 我想确保当小数部分以0结尾时浮点数不会被舍入。 例如: 我想在阵列中漂浮31.30以保持31.30,但我现在经历的是它被设置为31.3。
我想确保浮点数没有改变的原因是后来我将它拆分为两个整数(31.30到31和30),对我来说两个整数都具有'完整'值非常重要
有没有办法解决这个问题?我尝试制作这些浮点字符串,但我的问题是我需要比较数组与这些浮点数和numpy.array_equal()似乎不适用于字符串数组...
非常感谢任何帮助,
祝福
答案 0 :(得分:2)
由于31.3
和31.30
的数字完全相同,因此无法区分它们。但我想你无论如何都不需要。这似乎更像是格式化问题。如果你总是希望点后两位数:
from math import floor
x = 31.3
whole_part = int(floor(x))
two_after_dot = int(floor(x*100))-whole_part*100
print(whole_part, two_after_dot)
输出:
31 30
如果实际情况并非如此,并且点后面的位数应该变化,同时保持不同数量的尾随零,则不能使用数字类型。而是从一开始就使用字符串。
答案 1 :(得分:0)
当由于将毫秒引用转换为微秒而遇到类似问题时,我不得不转换为字符串并在字符串上循环添加所需的0,直到字符串的长度正确为止。然后当值转换回整数时,计算就可以了。
The data will be passed to strptime as as string
vals = vals.split('.') # a fractional part of the seconds
nofrag, frag = vals
length = len(frag)
# This converts the fractional string to microseconds, given unknown precision
if length > 6:
frag = frag(0:5)
else:
while length < 6:
frag = frag + '0'
length += 1
# strptime requires even seconds with microseconds added later
nofrag_dt = DT.datetime.strptime(nofrag, '%Y%m%d %H%M%S')
dt = nofrag_dt.replace(microsecond=int(frag))
return dt