Bagikan melalui


Memformat String Desimal dan Nilai Uang (Driver SQLSRV)

Unduh driver PHP

Untuk mempertahankan akurasi, jenis desimal atau numerik selalu diambil sebagai string dengan presisi dan skala yang tepat. Jika ada nilai kurang dari 1, nol di depannya hilang. Ini sama dengan bidang uang dan smallmoney karena bidang desimal dengan skala tetap sama dengan 4.

Tambahkan nol di depan jika hilang

Dimulai dengan versi 5.6.0, opsi FormatDecimals ditambahkan ke tingkat koneksi dan pernyataan sqlsrv, yang memungkinkan pengguna memformat string desimal. Opsi ini mengharapkan nilai boolean (benar atau salah) dan hanya memengaruhi pemformatan nilai desimal atau numerik dalam hasil yang diambil. Dengan kata lain, FormatDecimals opsi tidak berpengaruh pada operasi lain seperti penyisipan atau pembaruan.

Secara default, FormatDecimals adalah false. Jika diatur ke true, nol di depan ke string desimal akan ditambahkan untuk nilai desimal apa pun kurang dari 1.

Mengonfigurasi jumlah tempat desimal

Dengan FormatDecimals diaktifkan, opsi lain, DecimalPlaces, memungkinkan pengguna untuk mengonfigurasi jumlah tempat desimal saat menampilkan uang dan data smallmoney. Ini menerima nilai bilangan bulat dalam rentang [0, 4], dan pembulatan dapat terjadi saat ditunjukkan. Namun, data uang yang mendasar tetap sama.

Kedua opsi dapat diatur ke tingkat koneksi atau pernyataan, dan pengaturan pernyataan selalu mengambil alih pengaturan koneksi yang sesuai. Perhatikan bahwa DecimalPlaces opsi ini hanya memengaruhi data uang, dan FormatDecimals harus diatur ke true DecimalPlaces agar berlaku. Jika tidak, pemformatan dinonaktifkan terlepas dari DecimalPlaces pengaturan.

Catatan

Karena bidang uang atau smallmoney memiliki skala 4, menetapkan DecimalPlaces nilai ke angka negatif atau nilai apa pun yang lebih besar dari 4 akan diabaikan. Tidak disarankan untuk menggunakan data uang yang diformat sebagai input ke perhitungan apa pun.

Contoh - pengambilan sederhana

Contoh berikut menunjukkan cara menggunakan opsi baru dalam pengambilan sederhana.

<?php
$username = 'myusername';
$password = 'mypasword';
$tableName = 'mytable';

$connectionInfo = array("UID" => $username, "PWD" => $password, "Database" => "myDB", "FormatDecimals" => true);  
$server = "myServer";  // IP address also works
$conn = sqlsrv_connect( $server, $connectionInfo);  

$numDigits = 2;
$query = "SELECT money1 FROM $tableName";
$options = array("DecimalPlaces" => $numDigits);
$stmt = sqlsrv_prepare($conn, $query, array(), $options);
sqlsrv_execute($stmt);

if (sqlsrv_fetch($stmt)) {
    $field = sqlsrv_get_field($stmt, 0);  
    echo $field;   // expect a numeric value string with 2 decimal places
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>

Contoh - format parameter output

Jika bidang desimal atau numerik dikembalikan sebagai parameter output, nilai yang dikembalikan akan dianggap sebagai string varchar reguler. Namun, jika SQLSRV_SQLTYPE_DECIMAL atau SQLSRV_SQLTYPE_NUMERIC ditentukan, Anda dapat mengatur FormatDecimals ke true untuk memastikan tidak ada nol awal yang hilang untuk nilai string numerik. Untuk informasi selengkapnya, silakan baca Cara: Mengambil Parameter Output Menggunakan Driver SQLSRV.

Contoh berikut menunjukkan cara memformat parameter output prosedur tersimpan yang mengembalikan nilai desimal(8,4).

$outString = '';
$outSql = '{CALL myStoredProc(?)}';
$stmt = sqlsrv_prepare($conn, 
                       $outSql, 
                       array(array(&$outString, SQLSRV_PARAM_OUT, null, SQLSRV_SQLTYPE_DECIMAL(8, 4))),
                       array('FormatDecimals' => true));

if (sqlsrv_execute($stmt)) {
    echo $outString;  // expect a numeric value string with no missing leading zero
}

Lihat juga

Memformat String Desimal dan Nilai Uang (driver PDO_SQLSRV)

Mengambil Data