【问题标题】:Communicating BigFloat between client and server using JSON in Perl在 Perl 中使用 JSON 在客户端和服务器之间通信 BigFloat
【发布时间】:2014-08-16 10:25:58
【问题描述】:
我在客户端和服务器之间传输货币值,并且我使用Math::BigFloat(在 Perl 中)来保持值的精度。我的问题是,在客户端和服务器之间进行通信时,我使用的是 JSON,而在 Perl 中使用 from_json 和 to_json 快捷方式时出现错误。
错误提示我没有启用 allow_blessed 或 convert_blessed。有没有办法在使用 from_json 和 to_json 快捷方式的同时启用这些,而不必使用 OO 接口 ($json = JSON->new->allow_nonref;)
更一般地说,处理高精度数字类型的服务器和客户端之间的 JSON 通信的正确方法是什么?
【问题讨论】:
标签:
json
perl
floating-point
【解决方案1】:
最简单的可能是把数字串起来,然后在另一边把它变成一个 Math::BigFloat。
例如:
package Client;
use strict;
use warnings;
use Math::BigFloat;
use JSON qw(to_json);
my $pi = Math::BigFloat->bpi(1000);
my $json = to_json { pi => $pi->bstr };
say $json;
然后:
package Server;
use strict;
use warnings;
use Math::BigFloat;
use JSON qw(from_json);
my $json = '{ "pi":"3.14159" }';
my $hashref = from_json($json);
my $pi = Math::BigFloat->new($hashref->{pi});
say $pi;