sqlite 如何始终保持一个数字有2个小数位?

wsxa1bj1  于 2022-12-13  发布在  SQLite
关注(0)|答案(2)|浏览(1223)

我试图在sqlite中保持一列中的数字在逗号后有两位小数。如果在小数点后只有一个数字,那么我必须加上0。例如:

drop table if exists numbers;
create table numbers (number float);

insert into numbers values ('97.516,82');
insert into numbers values ('97.409,9');
insert into numbers values ('97.409,87');
insert into numbers values ('97.331,6'); -- correct 97.331,60
insert into numbers values ('97.229,00');
insert into numbers values ('97.183,70');
insert into numbers values ('97.163,25');
insert into numbers values ('97.163,1'); -- correct 97.163,10
insert into numbers values ('97.121,98');
insert into numbers values ('97.105,56');
insert into numbers values ('97.101,44');
insert into numbers values ('97.076,77');
insert into numbers values ('97.060,28');
insert into numbers values ('97.019,17');
insert into numbers values ('97,34');
insert into numbers values ('97,3'); -- correct 97,30
insert into numbers values ('969,19');
insert into numbers values ('968,89');
insert into numbers values ('968,7'); -- correct 968,70
insert into numbers values ('968,76');

select * from numbers

我注解了它应该格式化的方式,我已经尝试了以下

select printf('%.2f',number) from numbers

但我不想让它保持这种格式有人能帮忙吗?

vd8tlhqk

vd8tlhqk1#

printf('%.2f',number)是始终显示两位小数的正确方法,但问题出在INSERT而不是查询中。
要在查询中获得正确的结果,需要更正插入的值。
Sqlite具有Flexible Data Typing。由于您将列声明为FLOAT,它将尝试将您尝试插入的任何值转换为INTEGER或真实的(按优先顺序)。由于每个值中都存在,字符,Sqlite将其解释为字符串并将其存储为TEXT值。
当您尝试使用printf('%.2f',number)转换为浮点数时,该点被解释为小数点分隔符,逗号,之后的任何内容都将被丢弃,因此您插入的第一个值将转换为97.516(然后通过printf('%.2f',number)舍入为97.52),而最后一个值将转换为968(并打印为968.00)。
printf('%.2f',replace(replace(number,'.',''),',','.')是一个很好的方法,但是你不能添加千位分隔符。要添加千位分隔符,你需要将整数部分和小数部分连接起来,就像它们是两个整数一样:

select printf('%,d.%02d',replace(replace(number,'.',''),',','.'),replace(replace(number,'.',''),',','.')*100%100) from numbers

第一个值将转换为带有千位分隔符的整数,然后是一个点,最后是第二个数字(小数部分的前两位被视为整数)。

wfypjpf4

wfypjpf42#

第一步:确定小数点后千分之一位或第三位的数字。第二步:如果千分位数大于等于5,则百分位数增加1;如果千分位数小于5,则百分位数保持不变。步骤3:忽略数字小数部分的所有剩余位数。看下面给出的图像,该图像显示了十进制数2.835706向上舍入到小数点后两位的值。
四舍五入到两位小数
为了更好地理解这个概念,我们再举一个四舍五入到小数点后两位的例子。
要做到这一点,让我们按照上面的步骤来做。第一步是确定这个数中的千分之一位数字是3。现在,由于3〈5,我们必须保持百分之一位数字不变。因此,5.803 ≈ 5.80(其中≈是近似符号)。
使用Cuemath的免费在线四舍五入到两位小数计算器来验证您的答案。

相关问题