您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在python json.dumps输出中禁用科学计数法

在python json.dumps输出中禁用科学计数法

格式化的一种方法

evil = {"x": 0.00000000001}

是窃取Decimal的“ f”格式化程序。这是我发现的唯一避免裁切问题和指数的简单方法,但是它 不节省空间

class FancyFloat(float):
    def __repr__(self):
        return format(Decimal(self), "f")

要使用它,您可以制作一个使输入“小数”化的编码器

class JsonRpcEncoder(json.JSONEncoder):
    def decimalize(self, val):
        if isinstance(val, dict):
            return {k:self.decimalize(v) for k,v in val.items()}

        if isinstance(val, (list, tuple)):
            return type(val)(self.decimalize(v) for v in val)

        if isinstance(val, float):
            return FancyFloat(val)

        return val

    def encode(self, val):
        return super().encode(self.decimalize(val))

JsonRpcEncoder().encode(evil)
#>>> '{"x": 0.00000000000999999999999999939496969281939810930172340963650867706746794283390045166015625}'

或者,当然,您可以将小数部分移到一个函数中,然后在之前调用json.dumps

即使这是一种la脚的方法,我也是这样做的。

python 2022/1/1 18:29:08 有252人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶