【问题标题】: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_jsonto_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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多