python - 如何控制从自定义对象到 numpy.longdouble 的转换?
问题描述
我有一个自定义类(由于历史原因)将高精度数字存储为两个整数,表示整数部分和纳米精度非整数部分,例如:
class Custom(object):
def __init__(self, int_, nano_):
self._int = int_
self._nano = nano_
def __float__(self):
return self._int + self._nano * 1e-9
def __int__(self):
return self._int
但是,当我尝试将其转换为它时,numpy.longdouble
它正在通过该__float__
方法:
>>> a = Custom(1234567890, 123456789)
>>> print(numpy.longdouble(a))
1234567890.1234567165
>>> print(numpy.longdouble(float(a)))
1234567890.1234567165
>>> print(numpy.longdouble(a._int) + numpy.longdouble(a._nano * 1e-9))
1234567890.123456789
最后一个例子就是我想要的结果。所以问题是,如何覆盖强制转换为的默认行为numpy.longdouble
?
解决方案
我认为它现在不可行,因为中间float
演员是不可避免的(有关详细信息,请参阅此问题)。虽然float
type 无法保留这种长数字小数的精度(请查看表示float
以获取详细信息)。
一种解决方法是“覆盖”该numpy.longdouble
功能:
class Custom(object):
def __init__(self, int_, nano_):
self._int = int_
self._nano = nano_
def __float__(self):
return self._int + self._nano * 1e-9
def longdouble(self):
return numpy.longdouble(a._int) + numpy.longdouble(a._nano * 1e-9)
def __int__(self):
return self._int
a = Custom(1234567890, 123456789)
print(a.longdouble())
推荐阅读
- java - 是否可以在 ServerListPingEvent `event.setMotd()` 中获得换行符的效果?
- ios - 如何以iso格式更改日期字符串的时区?
- javascript - 如何使用 js 将变量内容保存/加载到文本文件
- java - ListView:列表视图的第一项影响其最后一项
- json - 如何在 Json.Text 中全局添加自定义转换器?
- python - 使用 Pandas 在 .csv 文件中查找特定值的 x,y 坐标
- python - 我怎样才能让它让python读取一个文件,任务是让某人从这个文件中命名10首歌曲,而不能重复一首歌曲
- qt - Qt垂直滚动条跳转到电子表格顶部
- java - 日期选择器对话框不显示除当前日期以外的任何日期
- matlab - 从未定义的对象中读取和查找 matlab 代码中的特定值?