假设我有一个浮点数
x = 2.00我想把它作为json发送。
message = { 'x': 2.00 } 但当我这么做的时候
print(message)我发现python把最后一位小数点漏掉了。如何将浮点数保持在小数点后两位?我知道2.00和2.0没有什么不同,但它要求我发送确切的数字(包括两位小数)(我已经尝试过decimal类,它的行为仍然是一样的,我需要将它作为一个浮点数而不是一个字符串发送)。提前谢谢。
发布于 2020-01-02 22:22:06
你需要使用一个专门的库来序列化浮点数和保持精度。Protocol Buffers就是这样一个库(协议),您可以定义自己的JSON编码器类:https://developers.google.com/protocol-buffers/docs/proto3。
发布于 2020-01-02 22:51:08
您可以定义自己的JSON编码器类:
import json
message = {'x': 2.00}
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, dict):
result = '{'
for key, value in obj.items():
if isinstance(value, float):
encoded_value = format(value, '.2f')
else:
encoded_value = json.JSONEncoder.encode(self, value)
result += f'"{key}": {encoded_value}, '
result = result[:-2] + '}'
return result
return json.JSONEncoder.encode(self, obj)
print(json.dumps(message, cls=MyEncoder))输出:
{"x": 2.00}发布于 2020-01-02 22:42:01
下面是一个例子:
a=2.00
print ("{0:.2f}".format(a))https://stackoverflow.com/questions/59564724
复制相似问题