Oracle是否为Number数据类型存储尾随零?

Sur*_*aju 3 sql oracle

当我在表中存储数值并在SQL Developer中查询该表时,它没有显示Number数据类型的尾随零.

create table decimal_test(decimal_field number(*,10));

insert into decimal_test(decimal_field) values(10);
insert into decimal_test(decimal_field) values(10.11);
insert into decimal_test(decimal_field) values(10.100);
insert into decimal_test(decimal_field) values(10.00);

select * from decimal_test;
Run Code Online (Sandbox Code Playgroud)

结果是

10
10.11
10.1
10
Run Code Online (Sandbox Code Playgroud)

这些值是从java代码处理的.在这种情况下,我BigDecimal用来存储值.

在保存到DB之前,如果我有BigDecimal(10.00),在保存之后,从DB返回的值是BigDecimal(10).BigDecimal由于比例已更改,因此等于方法失败.

而且我的小数精度不是恒定的.用户可以设置BigDecimal(10.00)或BigDecimal (10.000)等.因此,值需要按原样存储在DB中.

有没有办法在oracle中存储尾随零?

Jim*_*son 6

尾随零的存在是显示问题,而不是存储问题.尾随零并不重要,无论如何,只要正确,数字的内部格式就不重要了.10和之间没有价值差异10.00000.

如果需要尾随零,则在转换显示值时始终可以使用格式.例如:

System.out.printf("%10.4d\n", decimalValue);
Run Code Online (Sandbox Code Playgroud)

如果问题是在规模上的差异,你可以设置比较之前的规模,以适当的值.


Mar*_*ber 6

如果要保留数字输入的比例(可能很重要- 10.1 的度量与 10.100 的度量不同),请将比例存储在额外的列中。

create table decimal_test
(decimal_field number(*,10),
 decimal_scale number(*,0)
);
Run Code Online (Sandbox Code Playgroud)

计算输入的比例并将其存储在新列中decimal_scale

在输出格式中使用该值。

不建议将数字存储为字符串- 您保留比例但放松数字验证,并可能使 CBO 与类型转换引起的错误估计混淆......