Memformat String Desimal dan Nilai Uang (Driver SQLSRV)
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 depan hilang. Ini sama dengan uang dan bidang smallmoney karena bidang desimal dengan skala tetap sama dengan 4.
Tambahkan nol di awal jika hilang
Dimulai dengan versi 5.6.0, opsi FormatDecimals
ditambahkan ke tingkat koneksi dan pernyataan sqlsrv, yang memungkinkan pengguna untuk 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 ditampilkan. 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 hanya memengaruhi data uang, dan FormatDecimals
harus diatur ke true agar DecimalPlaces
berlaku. Jika tidak, pemformatan dinonaktifkan terlepas dari DecimalPlaces
pengaturannya.
Catatan
Karena bidang uang atau smallmoney memiliki skala 4, nilai pengaturan DecimalPlaces
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 di depan 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
}