Pertanyaan MySQL, ubah pembulatan default menjadi lebih dari empat digit


Baru mengetahui bahwa pertanyaan ini:

SELECT 1 / 1000000;

akan kembali 0, yang merupakan malapetaka kecil untuk program ekonomi kami ketika melakukan perhitungan tong. Bagaimana cara menetapkan jumlah desimal default tanpa mengubah setiap kueri?

Edit

Contohnya adalah mendapatkan bagian tong dari nilai bersih, dengan 6% tong. 6 / 106 = 0.056603773..., tapi SELECT 6 / 106 = 0.0566.


4
2018-05-02 15:55


asal


Jawaban:


Seperti yang didokumentasikan di bawah Operator Aritmatika:

Di divisi dilakukan dengan /, skala hasil ketika menggunakan dua operand nilai-pasti adalah skala operan pertama ditambah nilai dari div_precision_increment variabel sistem (yang merupakan 4 secara default). Misalnya, hasil ekspresi 5.05 / 0.014 memiliki skala enam desimal (360.714286).

Oleh karena itu, baik:

  • Meningkat div_precision_increment sesuai dengan kebutuhan Anda:

    SET div_precision_increment = 6;
    

    Atau, untuk mengatur secara global (yaitu di semua sesi mendatang):

    SET GLOBAL div_precision_increment = 6;
    

    Atau bahkan mengaturnya di [mysqld] bagian dari file opsi Anda / pada baris perintah untuk memastikan bahwa itu bertahan restart server.

  • Secara eksplisit berikan hasil operasi Anda ke tipe yang memiliki skala yang Anda inginkan:

    SELECT CAST(1 / 1000000 AS DECIMAL(10,8));
    

2
2018-05-02 16:40



Anda dapat mentransmisikan hasil ke tipe data apa pun. Di bawah sql letakkan hasilnya hingga desimal dengan presisi 10.

select cast(1 / 1000000 as decimal(10,10));

EDIT: Hasil tergantung pada tipe data Anda. Coba ini:

PILIH 6.000000 / 106.000000;

Jika data Anda desimal dengan presisi yang dibutuhkan maka hasil Anda akan desimal dengan ketepatan yang cukup. Jadi saya pikir Anda harus memperbarui jenis tanggal di database Anda.


1
2018-05-02 16:04



Coba PPN bersih dengan penjualan sepuluh ribu euro:

SELECT 10000 * (6/106)

Saya yakin Anda akan melihat perhitungan yang benar: 566.0377

Jika Anda ingin itu ditampilkan membulat ke dua tempat desimal, sen, lakukan ini:

SELECT ROUND(10000*(6/106),2)

Anda mungkin ingin datatyp mata uang (uang) Anda direpresentasikan sebagai DECIMAL. Misalnya, harga unit produk mungkin diwakili sebagai

  DECIMAL(10,2) 

untuk memungkinkan dolar / pound / euro dan seperseratus.

Maka aritmatika Anda seharusnya tidak kehilangan presisi. Sebagai contoh,

 SELECT 24*(6/106)*CAST(1.20 AS DECIMAL(10,2))

akan menghasilkan PPN bersih sebesar 6% untuk dua lusin item yang masing-masing bernilai 1,20.

Untuk membuat ini terjadi tanpa menyimpang dengan banyak pertanyaan, Anda mungkin perlu MENGUBAH beberapa definisi kolom Anda.

Saya sudah mencoba ini di MariaDB 10, MySQL 5.1, 5.5, dan 5.6. Sepertinya baik-baik saja.


1
2018-05-02 16:07