number(14,4)是精確的存儲(chǔ)方式。
在墨玉等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷(xiāo)推廣,外貿(mào)網(wǎng)站建設(shè),墨玉網(wǎng)站建設(shè)費(fèi)用合理。
存儲(chǔ) 999999.9999 肯定不會(huì)會(huì)出現(xiàn) 四舍五入 的情況
應(yīng)該是你自己的處理有問(wèn)題吧
我這樣試過(guò)了,肯定沒(méi)有問(wèn)題的:
create table t_test1(a number(14,4));
insert into t_test1 values(999999.9999);
select * from t_test1;
drop table t_test1;
假設(shè)列名為culm
select * from tableA
where length ( trunc ( to_char(culm) , instr(to_char(culm),'.') ) )=6;
instr(to_char(culm),'.') 這個(gè)表示小數(shù)點(diǎn)的點(diǎn)號(hào)在數(shù)值的位置,從這之后截取,然后計(jì)算長(zhǎng)度,限定為6就可以了
oracle精度會(huì)自動(dòng)截取。根據(jù)查詢(xún)相關(guān)資料信息顯示,ROUND按照指定的精度進(jìn)行四舍五入,oracle中對(duì)查詢(xún)出來(lái)的數(shù)據(jù)進(jìn)行自動(dòng)切割、截取等操作。Oracle中的取精度函數(shù)常用的有ROUND函數(shù)、TRUNC函數(shù)、FLOOR函數(shù)和CEIL函數(shù)。
NUMERIC(p,s):完全映射至NUMBER(p,s)。如果p未指定,則默認(rèn)為38.
DECIMAL(p,s)或DEC(p,s):完全映射至NUMBER(p,s)。如果p為指定,則默認(rèn)為38.
INTEGER或INT:完全映射至NUMBER(38)類(lèi)型。
SMALLINT:完全映射至NUMBER(38)類(lèi)型。
FLOAT(b):映射至NUMBER類(lèi)型。
DOUBLE PRECISION:映射至NUMBER類(lèi)型。
REAL:映射至NUMBER類(lèi)型。
以上這些類(lèi)型只是oracle在語(yǔ)法上支持的,在底層實(shí)際上還是number
1.表示的數(shù)值范圍
NUMBER:Oracle NUMBER類(lèi)型能以極大的精度存儲(chǔ)數(shù)值,具體來(lái)講,精度可達(dá)38位。其底層數(shù)據(jù)格式類(lèi)似一種
“封包小數(shù)“表示。Oracle NUMBER類(lèi)型是一種變長(zhǎng)格式,長(zhǎng)度為0~22字節(jié)。它可以存儲(chǔ)小到10e-130、
大到(但不包括)10e126的任何數(shù)值。這是目前最為常用的數(shù)值類(lèi)型。也是Oracle9i Release 2及以
前的版本只支持的唯一一種適合存儲(chǔ)數(shù)值數(shù)據(jù)的固有數(shù)據(jù)類(lèi)型,其他一起兼容類(lèi)型只是一種和number
之間的映射,在底層實(shí)際上都是number
BINARY_FLOAT:這是一種IEEE固有的單精度浮點(diǎn)數(shù)。它在磁盤(pán)上會(huì)占用5字節(jié)的存儲(chǔ)空間:其中4個(gè)固定字節(jié)用
于存儲(chǔ)浮點(diǎn)數(shù),另外還有一個(gè)長(zhǎng)度字節(jié)。BINARY_FLOAT能存儲(chǔ)有6為精度、范圍在~±1038.53
的數(shù)值
BINARY_DOUBLE:這是一種IEEE固有的雙精度浮點(diǎn)數(shù)。它在磁盤(pán)上會(huì)占用9字節(jié)的存儲(chǔ)空間:其中8個(gè)固定字節(jié)用
于存儲(chǔ)浮點(diǎn)數(shù),還有一個(gè)長(zhǎng)度字節(jié)。BINARY_DOUBLE能存儲(chǔ)有12.位精度、范圍在~±10308.25的
數(shù)值。
取值范舉例:
創(chuàng)建測(cè)試表t2
SQL create table t2
2 ( num_type number,
3 float_type binary_float,
4 double_type binary_double
5 );
Table created
插入測(cè)試數(shù)據(jù)1
SQL
SQL insert into t2
2 (num_type, float_type, double_type)
3 values
4 (1234567890.0987654321, 1234567890.0987654321, 1234567890.0987654321);
1 row inserted
查看測(cè)試數(shù)據(jù)1
SQL
SQL select to_char(num_type),
2 to_char(float_type, '999999999999.999999999'),
3 to_char(double_type, '99999999999.9999999999')
4 from t2
5 ;
TO_CHAR(NUM_TYPE) TO_CHAR(FLOAT_TYPE,'9999999999 TO_CHAR(DOUBLE_TYPE,'999999999
--------------------------- -----------------------------------------------------------------------------------
1234567890.0987654321 1234567940.000000000 1234567890.0987654000
數(shù)據(jù)庫(kù)操作很容易常見(jiàn)的問(wèn)題,java.math.BinInteger類(lèi)和java.math.BigDecimal類(lèi),你可以用下這兩個(gè),這兩個(gè)對(duì)數(shù)據(jù)反復(fù)操作保真很好,你可以試試
這個(gè)是雙精度數(shù)據(jù)的存儲(chǔ)問(wèn)題,既然是double,數(shù)據(jù)必然存在這樣的問(wèn)題。
所以,你可以在需要顯示的時(shí)候,進(jìn)行格式化,
c里面 的格式 好像是 ".2f%",proc應(yīng)該也有對(duì)應(yīng)的功能,你找一下。