Adakah Oracle Mengekalkan Sifar Jejak dalam Jenis Data Nombor?
Dalam Oracle, jenis data Nombor direka untuk mengendalikan nilai angka dengan ketepatan yang berbeza-beza dan skala. Walau bagaimanapun, pengguna mungkin menghadapi senario di mana sifar mengekor tidak dipaparkan semasa menanyakan nilai berangka.
Untuk menggambarkan isu ini, pertimbangkan contoh berikut:
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;
Apabila menanyakan jadual ini dalam Pembangun SQL, keputusannya kelihatan seperti berikut:
10 10.11 10.1 10
Seperti yang anda boleh perhatikan, sifar di belakang dalam nilai berangka tidak dipaparkan. Tingkah laku ini boleh menyebabkan kekeliruan apabila membandingkan nilai BigDecimal dalam kod Java, kerana skala nombor mungkin berubah selepas disimpan ke pangkalan data.
Memahami Isu
The ketiadaan sifar tertinggal dalam output bukanlah isu penyimpanan data sebaliknya isu paparan. Oracle secara dalaman menyimpan nilai berangka dalam format yang tidak memerlukan pengekalan sifar tertinggal. Ini kerana sifar mengekor tidak dianggap penting.
Mengendalikan Sifar Mengekor
Walaupun Oracle tidak menyimpan sifar mengekor secara asli, terdapat beberapa pilihan untuk menangani isu ini:
Pemformatan Paparan:
Jika anda memerlukan ketinggalan sifar untuk tujuan paparan, anda boleh menggunakan teknik pemformatan apabila menukar nilai kepada rentetan. Sebagai contoh, kod Java berikut akan memaparkan nombor dengan empat tempat perpuluhan:
System.out.printf("%10.4d\n", decimalValue);
Kawalan Skala:
Jika isu berkaitan dengan perbezaan skala apabila membandingkan Nilai BigDecimal, anda boleh menetapkan skala secara eksplisit kepada nilai yang dikehendaki sebelum membuat perbandingan. Ini akan memastikan bahawa nilai dibandingkan dengan betul.
Atas ialah kandungan terperinci Adakah Jenis Data Nombor Oracle Mengekalkan Sifar Jejak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!