我有一个关于PostgreSQL 9.2中浮点数的新手问题。
有没有直接舍入浮点数的函数,即不需要先将数字转换为数字类型?
另外,我想知道是否有一个函数可以用任意的度量单位进行取整,例如精确到0.05?
首先将数字转换为十进制形式时,以下查询工作正常:
SELECT round(1/3.::numeric,4);
round
--------
0.3333
(1 row)
Time: 0.917 ms
然而,我真正想要实现的是以下几点:
SELECT round(1/3.::float,4);
这当前给了我以下错误:
ERROR: function round(double precision, integer) does not exist at character 8
Time: 0.949 ms
谢啦
您可以通过按照以下方式做一些事情来实现这一点:
select round( (21.04 /0.05 ),0)*0.05
其中21.04
是要舍入的数字,0.05
是精度。
尝试
SELECT round((1/3.)::numeric,4);
适用于任何版本的PostgreSQL。
在一些PostgreSQL函数中缺乏重载,为什么(???):我认为“这是一种缺乏”,下面显示了我的解决方案,但请参阅此讨论以获得更多解释。
您可以使用,
CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
SELECT ROUND($1::numeric,$2);
$$ language SQL IMMUTABLE;
现在您的指令将正常工作,请尝试(创建函数后)
SELECT round(1/3.,4); -- 0.3333 numeric
但它会返回一个数字类型。。。为了保留第一个常用用法重载,我们可以在提供文本参数时返回一个float,
CREATE FUNCTION ROUND(float, text, int DEFAULT 0)
RETURNS FLOAT AS $$
SELECT CASE WHEN $2='dec'
THEN ROUND($1::numeric,$3)::float
-- ... WHEN $2='hex' THEN ... WHEN $2='bin' THEN...
ELSE 'NaN'::float -- is like a error message
END;
$$ language SQL IMMUTABLE;
尝试
SELECT round(1/3.,'dec',4); -- 0.3333 float!
SELECT round(2.8+1/3.,'dec',1); -- 3.1 float!
SELECT round(2.8+1/3.,'dec'::text); -- need to cast string? pg bug
PS:您可以通过\df检查过载,
\df round
Schema | Name | Datatype of result | Datatype of parameters
-----------+-------+---------------------------+--------------------------------
myschema | round | numeric | double precision, integer
myschema | round | double precision | double precision, text, integer
pg_catalog | round | double precision | double precision
pg_catalog | round | numeric | numeric
pg_catalog | round | numeric | numeric, integer
pg_catalog函数是默认函数,请参阅内置数学函数手册。
问题内容: 我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少和的结果。在调查中,我注意到以下Python代码: 生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本: 而且我看不到发生这种舍入错误的
问题内容: 有没有办法将python浮点数舍入为x小数?例如: 我已经找到了修剪/截断它们的方法(66.666666666-> 66.6666),但是不是圆形的(66.666666666-> 66.6667)。 问题答案: 使用内置功能: 帮助: round(number [,ndigits])->浮点数 将数字四舍五入到给定的精度(以十进制数字表示)(默认为0位数)。这总是返回一个浮点数。精度可
问题内容: 我期望的是0.313而不是0.312,为什么会这样呢?还有其他方法可以用来获得0.313吗? 谢谢 问题答案: Python 3使用舍入到偶数方法根据IEEE 754标准进行舍入。 如果您想采用另一种方式取整,则只需手动实施即可: 用法示例: 注意: 在python2中,舍入总是远离零,而在python3中,它舍入为偶数。(例如,请参见功能文档中的2.7和3.3之间的区别)。
我将货币值作为浮动存储在mysql表中。 问题是,mysql正在向上或向下舍入数字。 例如,12345.68四舍五入为12345.7 如何停止此操作,或者是否应该使用更好的数据类型? 我希望将原始值保留在小数点后2位以内。
我不明白为什么这是1.0。它不应该是0.999999999999吗?因此,我提出了一种解决方案,python对其答案进行了自动舍入,但如果大于,则无法解释以下结果。。。 我以为四舍五入错误是因为尾数中使用的位数有限,指数(浮点数),但0.9999~~9也没有超出位数的限制...有人能解释一下为什么这些结果会这样吗?
我写了这段代码,它只是对n个数字的列表进行求和,以练习浮点运算,但我不明白这一点: 我正在使用float,这意味着我有7位精度,因此,如果我执行10002*10002=100040004的操作,数据类型float的结果将是100040000.000000,因为我丢失了第7位以外的任何数字(程序仍然知道指数,如图所示)。 如果此程序中的输入是 然而,您将看到,当这个程序计算30003*30003=9