当前位置: 首页 > 知识库问答 >
问题:

如何保持PostgreSQL JDBC连接上float->String转换的精度

单于俊智
2023-03-14
CREATE OR REPLACE FUNCTION do_dummy()
    RETURNS void LANGUAGE plpgsql AS $$
DECLARE
    v_float float[];
    v_json jsonb;
    v_str varchar;
BEGIN
    v_float[0] = 4.1;
    raise notice 'v_float = %', v_float[0];
    raise notice 'jsonb float -> %', ('{"v": 4.1}'::jsonb)->'v';
    raise notice 'jsonb float ->> %', ('{"v": 4.1}'::jsonb)->>'v';

    v_float[0] = ('{"v": 4.1}'::jsonb)->>'v';
    raise notice 'jsonb float ->>::float %', v_float[0];

    v_json = array_to_json(v_float);
    raise notice 'jsonb: %', v_json;

    v_str = concat('jsonb as string: ', v_json::varchar);
    raise notice '%', v_str;
END $$

执行时

select do_dummy();

...通过pgAdmin,输出如下,与预期一致:

NOTICE:  v_float = 4.1
NOTICE:  jsonb float -> 4.1
NOTICE:  jsonb float ->> 4.1
NOTICE:  jsonb float ->>::float 4.1
NOTICE:  jsonb: [4.1]
NOTICE:  jsonb as string: [4.1]

在Java应用程序中执行时,结果如下

NOTICE: v_float = 4.0999999999999996
NOTICE: jsonb float -> 4.1
NOTICE: jsonb float ->> 4.1
NOTICE: jsonb float ->>::float 4.0999999999999996
NOTICE: jsonb: [4.0999999999999996]
NOTICE: jsonb as string: [4.0999999999999996]

共有1个答案

东门胤
2023-03-14

驱动程序初始化extra_float_digits

如果你跑

set extra_float_digits = 0;

在调用函数之前,通过JDBC获得相同的输出

 类似资料:
  • 问题内容: 如何从float转换为string或从string转换为float? 在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算出的浮点值之间进行断言。 我尝试从浮动到字符串: 但是断言失败 问题答案: 使用Java的类。 为了进行比较,将字符串转换为float并比较两个float总是更好。这是因为对于一个浮点数,存在多个字符串表示形式,与字符串相比,它们是不同的(例如“ 25”!

  • 我想将浮点值转换为int值或抛出异常,如果这种转换是不准确的。 我找到了以下建议:使用来转换,然后使用来检查这些值是否相等。如果它们相等,那么转换是精确的,否则就不是。 但是我发现了一个不起作用的例子。下面是演示这个例子的代码: 它输出: 我知道2147483648不适合整数范围,但我很惊讶为这些值返回true。有没有更好的方法来比较float和int?我想可以将这两个值都转换为字符串,但对于这样

  • 问题内容: 我正在尝试将字符串转换为,但是得到了。 我的字串是,现在我将其转换为我所拥有的任何一个。 我如何将其转换为它们中的任何一个。 请帮助我摆脱这个问题。 问题答案: 您必须为数字使用适当的语言环境,例如 版画

  • 问题内容: 我正在尝试转换从UITextField中获取的数字(我认为这些数字实际上是字符串),并将其转换为Float,因此我可以将它们相乘。 我有两个声明如下: 当用户按下UIButton时,我想计算用户赚取的工资,但是我不能,因为我需要先将其转换为浮动工资,然后才能使用它们。 我知道如何通过执行以下操作将它们转换为整数: 但是,我不知道如何将它们转换为浮点数。 问题答案: 迅捷2.0+ 现在,

  • 问题内容: 我正在使用POST方法。我需要创建一次,并且应该使用Keep Alive Connection。但是我认为,它每次都会建立一个新的连接。 因此,我需要使用 保持活动 连接。 这是我的代码段,很多帮助将不胜感激。 而且logcat日志是: 问题答案: 10:07:29.746:D / org.apache.http.headers(1529):>>连接:保持活动 您正在要求保持活动状态。

  • 本文向大家介绍Python将string转换到float的实例方法,包括了Python将string转换到float的实例方法的使用技巧和注意事项,需要的朋友参考一下 Python 如何转换string到float?简单几步,让你轻松解决。 打开软件,新建python项目,如图所示 右键菜单中创建.py文件,如图所示 步骤中文件输入代码如下: 空白后,右键菜单中选择【Run 'test'】 查看运