删除小数点雪花后的尾随零

     2023-03-29     269

关键词:

【中文标题】删除小数点雪花后的尾随零【英文标题】:Removing trailing zeroes after decimal Snowflake 【发布时间】:2021-12-01 11:24:52 【问题描述】:

我一直在尝试从小数点后的数字列中删除尾随零。例如:

0.978219150000 -> 0.97821915
0.650502591918 -> 0.650502591918
0.975479450000 -> 0.97547945

数据类型为 NUMBER(38,12)。有没有办法像我上面提到的那样删除尾随零?

【问题讨论】:

【参考方案1】:

如果这只是一个格式/显示问题,您可以使用带有固定十进制格式字符串的 to_varchar() 函数:

select 123.45::number(38,12); -- 123.450000000000
select to_varchar(123.45::number(38,12), '99G999G999G999G999G999G999G999G999D999999999999'); -- 123.45

由于格式字符串有点长,将其放在 UDF 中以使其在 SQL 中更紧凑可能是有意义的:

create or replace function DISPLAY_38_12(N number(38,12))
returns varchar
language sql
as
$$
to_varchar(123.45::number(38,12), '99G999G999G999G999G999G999G999G999D999999999999')
$$;

select DISPLAY_38_12(123.45::number(38,12));

【讨论】:

【参考方案2】:

您可以尝试强制转换为浮动:

create or replace table test (a NUMBER(38,12));
insert into test values (0.97821915), (0.650502591918), (0.975479450000);

select a from test;
+----------------+
|              A |
|----------------|
| 0.978219150000 |
| 0.650502591918 |
| 0.975479450000 |
+----------------+

select a::float from test;
+--------------+
|     A::FLOAT |
|--------------|
| 0.97821915   |
| 0.6505025919 |
| 0.97547945   |
+--------------+

但是,根据您想要实现的目标,由于潜在的舍入问题,使用浮点数可能不是一个好主意。

更新:

我尝试了正则表达式版本,不确定我是否错过了任何测试用例:

create or replace table test (a NUMBER(38,12));
insert into test values 
    (0.97), 
    (0.650502591918), 
    (0.975479450000), 
    (10000), 
    (1450000), 
    (12.2000), 
    (14.0200);

select regexp_replace(
    a::varchar, 
    '^([0-9]+)$|' ||
    '^([0-9]+)\.0*$|' ||
    '^([0-9]+\.[0-9]1,[1-9])0*$|' ||
    '^([0-9]+\.[1-9])0*$', '\\1\\2\\3\\4'
) as a from test;

+----------------+
| A              |
|----------------|
| 0.97           |
| 0.650502591918 |
| 0.97547945     |
| 10000          |
| 1450000        |
| 12.2           |
| 14.02          |
+----------------+

地点:

^([0-9]+)$                   -> will cover the integer like 10000
^([0-9]+)\.0*$               -> will cover integer like 10.000000
^([0-9]+\.[0-9]1,[1-9])0*$ -> will cover 14.0200000
^([0-9]+\.[1-9])0*$.         -> will cover 12.20000 or 0.97540000

【讨论】:

带逗号的 Oracle 格式数字删除尾随零小数

...】:在我的查询中,我试图用逗号输出数字,但我想删除小数点后的所有尾随零。例如:3132000.00->3,132,0004321.10->4,321.1132.01->132.01我一直在使用TO 查看详情

删除前导零和尾随零并将结果保留到小数点后两位

】删除前导零和尾随零并将结果保留到小数点后两位【英文标题】:Removingleadingandtrailingzerosandhavetheresultintwodecimalplaces【发布时间】:2020-01-2719:23:37【问题描述】:我想删除前导零和尾随零,并希望将结果保留到小数点后两位。... 查看详情

使用 NSNumberFormatter 生成小数点后尾随零的数字

】使用NSNumberFormatter生成小数点后尾随零的数字【英文标题】:UsingNSNumberFormattertogeneratenumberwithtrailingzerosafterdecimal【发布时间】:2014-10-2805:57:44【问题描述】:在Swift中,您将如何创建一个NSNumberFormatter来保留小数点(12.000)后的尾... 查看详情

如何在 WebApi IActionResult Ok() 函数中删除可空小数的尾随零?

】如何在WebApiIActionResultOk()函数中删除可空小数的尾随零?【英文标题】:HowtoremovetrailingzerosofnullabledecimalinWebApiIActionResultOk()function?【发布时间】:2019-08-0812:21:27【问题描述】:我有一个sqlSeverBDD,它存储一些表,其中包含十进... 查看详情

如何从 Pandas 日期时间索引中删除尾随零(根据需要格式化)?

...日期时间索引的Pandas数据框,它在第二个之后给了我9个小数点。我只需要直到女士。如何摆脱多余的尾随零并四舍五入?提前谢谢。我试过了all_data 查看详情

如何从双精度中删除尾随零 [重复]

】如何从双精度中删除尾随零[重复]【英文标题】:Howtoremovetrailingzerosfromadouble[duplicate]【发布时间】:2012-12-2117:03:43【问题描述】:例如,我需要将5.0变为5,或将4.3000变为4.3。【问题讨论】:注意:与链接问题中的最佳答案不... 查看详情

BigDecimal 去除尾随零

...020-10-2918:19:20【问题描述】:我有一个BigDecimal值,并希望删除尾随零直到某个点。以下是一些示例:1.00000->1.012.2->12.219.9300->19.93请注意第一种情况,当所有小数都为零时,我们希望保留一个小数位。我想避免使用stripTrailin... 查看详情

我想在使用 DecimalFormat 时保留尾随零

...意味着一个简单的分配),即使所有原始双精度中小数点后的数字为0-与任何整数一样。我想我也许可以使用setMinim 查看详情

将尾随零添加到小数位

】将尾随零添加到小数位【英文标题】:AddingTrailingZerostoDecimalPlaces【发布时间】:2020-09-2813:20:48【问题描述】:我有一个数据框列,其中以“。”存储数字数据(以千计)表示千位分隔符。初始输入文件缺少尾随零,并且需要... 查看详情

我如何确保十进制中有一定数量的数字(尾随零)

...的零,直到我注销并重新登录我的帐户。有没有办法检查小数点后是否总是有两个数字,如果没有则添加零?这是我的php减法代 查看详情

没有科学记数法的回声数,同时去除尾随零和小数点

】没有科学记数法的回声数,同时去除尾随零和小数点【英文标题】:Echonumberwithoutscientificnotation,whileremovingtrailingzerosanddecimalpoints【发布时间】:2014-01-2720:32:43【问题描述】:这个:functionoutput($x)return(float)($x==0?\'0\':rtrim(($x<0?r... 查看详情

显示小数而没有尾随零的最佳方法

】显示小数而没有尾随零的最佳方法【英文标题】:Bestwaytodisplaydecimalwithouttrailingzeroes【发布时间】:2011-03-0711:39:04【问题描述】:是否有一个显示格式化程序可以在c#中将小数作为这些字符串表示形式输出而不进行任何舍入?//... 查看详情

如何检查一个数字是不是有两位小数并在必要时保留尾随零?

】如何检查一个数字是不是有两位小数并在必要时保留尾随零?【英文标题】:Howtocheckifanumberhastwodecimalplacesandkeepthetrailingzeroifnecessary?如何检查一个数字是否有两位小数并在必要时保留尾随零?【发布时间】:2013-10-0423:54:58【问... 查看详情

Swift - 从 Double 中删除尾随零

】Swift-从Double中删除尾随零【英文标题】:Swift-RemoveTrailingZerosFromDouble【发布时间】:2015-06-1603:09:57【问题描述】:从双精度中删除尾随零的函数是什么?vardouble=3.0vardouble2=3.10println(func(double))//3println(func(double2))//3.1【问题讨论】... 查看详情

在 SQL Server 中划分小数类型会导致不必要的尾随零

...我试图将一串数字转换为十进制类型。虽然字符串不包含小数点,但根据我的规范,我知道字符串中的最后3个位置 查看详情

使用 RegEx 删除指数数字的尾随零

】使用RegEx删除指数数字的尾随零【英文标题】:RemovetrailingzerosforexponentialnumbersusingRegEx【发布时间】:2015-09-0821:19:42【问题描述】:使用正则表达式,如何删除1.0000000000e+12的尾随零?例如:1.0000000000e+12应该是:1e+121.0000000000e12... 查看详情

十进制数据类型在需要显示时去除尾随零

...序(另一个开发人员编写了它)有一个十进制变量,它在小数点后去掉两个零。如果它们包含一个大于0的数字或其组合,它不会丢弃尾随的2位数字。该值来自文本文件。示例文本值为 查看详情

XSLT:显示尾随零

】XSLT:显示尾随零【英文标题】:XSLT:SHOWtrailingzeros【发布时间】:2012-11-2616:10:53【问题描述】:我在XSD中定义了一个十进制变量,例如可以包含值1,5;1,50;1,550;1,500;...因此,它可以有未知的小数位数,甚至由零组成。现在... 查看详情