From 005fce63d1f78b6a1c23576ec7ee67dc88c6230b Mon Sep 17 00:00:00 2001 From: EMQ-YangM Date: Thu, 19 May 2022 16:16:05 +0800 Subject: [PATCH] feat: add rule engine function float2str/2 --- apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl | 4 ++++ apps/emqx_rule_engine/src/emqx_rule_funcs.erl | 4 ++++ apps/emqx_rule_engine/test/emqx_rule_funcs_SUITE.erl | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl b/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl index 4d2ddf10d..fe8e3c210 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs_rule.erl @@ -39,6 +39,7 @@ bool/1, int/1, float/1, + float2str/2, map/1, utf8_bin/1, utf8_str/1, @@ -258,6 +259,9 @@ float(Num) when is_number(Num) -> erlang:float(Num); float(Data) -> error({invalid_number, Data}). +float2str(Float, Precision) when is_float(Float) and is_integer(Precision) -> + float_to_binary(Float, [{decimals, Precision}, compact]). + map(Bin) when is_binary(Bin) -> case emqx_json:decode(Bin, [return_maps]) of Map = #{} -> Map; diff --git a/apps/emqx_rule_engine/src/emqx_rule_funcs.erl b/apps/emqx_rule_engine/src/emqx_rule_funcs.erl index 1e87458e4..a541307af 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_funcs.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_funcs.erl @@ -103,6 +103,7 @@ int/1, float/1, float/2, + float2str/2, map/1, bin2hexstr/1, hexstr2bin/1 @@ -616,6 +617,9 @@ float(Data, Decimals) when Decimals > 0 -> Data1 = ?MODULE:float(Data), list_to_float(float_to_list(Data1, [{decimals, Decimals}])). +float2str(Float, Precision) -> + emqx_plugin_libs_rule:float2str(Float, Precision). + map(Data) -> emqx_plugin_libs_rule:map(Data). diff --git a/apps/emqx_rule_engine/test/emqx_rule_funcs_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_funcs_SUITE.erl index 69da7e4de..614594974 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_funcs_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_funcs_SUITE.erl @@ -169,6 +169,11 @@ t_term_encode(_) -> end, TestData ). +t_float2str(_) -> + ?assertEqual(<<"20.2">>, emqx_rule_funcs:float2str(20.2, 1)), + ?assertEqual(<<"20.2">>, emqx_rule_funcs:float2str(20.2, 10)), + ?assertEqual(<<"20.199999999999999">>, emqx_rule_funcs:float2str(20.2, 15)), + ?assertEqual(<<"20.1999999999999993">>, emqx_rule_funcs:float2str(20.2, 16)). t_hexstr2bin(_) -> ?assertEqual(<<6, 54, 79>>, emqx_rule_funcs:hexstr2bin(<<"6364f">>)),