Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para preservar a precisão, tipos decimais ou numéricos são sempre recolhidos como cadeias com precisões e escalas exatas. Se algum valor for menor que 1, falta o zero à esquerda. É o mesmo com os campos do dinheiro e do dinheiro pequeno, pois são campos decimais com uma escala fixa igual a 4.
Adicione zeros à esquerda se estiverem em falta
A partir da versão 5.6.0, a opção FormatDecimals é adicionada aos níveis de ligação e instrução sqlsrv, permitindo ao utilizador formatar cadeias decimais. Esta opção espera um valor booleano (verdadeiro ou falso) e só afeta a formatação dos valores decimais ou numéricos nos resultados buscados. Ou seja, a FormatDecimals opção não tem efeito noutras operações como inserção ou atualização.
Por defeito, FormatDecimals é falso. Se definido como verdadeiro, os zeros iniciais para cadeias decimais serão somados para qualquer valor decimal inferior a 1.
Configurar o número de casas decimais
Com FormatDecimals ativado, outra opção, DecimalPlaces, permite aos utilizadores configurar o número de casas decimais ao mostrar dados de dinheiro e de pequena moeda. Aceita valores inteiros no intervalo de [0, 4], e pode ocorrer arredondamento quando mostrado. No entanto, os dados monetários subjacentes mantêm-se os mesmos.
Ambas as opções podem ser definidas ao nível de ligação ou de instrução, e a definição de instrução sobrepõe-se sempre à configuração de ligação correspondente. Note que a DecimalPlaces opção afeta apenas os dados monetários, e FormatDecimals deve ser definido para verdade para que DecimalPlaces entre em vigor. Caso contrário, a formatação está desativada independentemente da DecimalPlaces definição.
Observação
Como os campos de dinheiro ou smallmoney têm uma escala de precisão de 4, definir o valor de DecimalPlaces para qualquer número negativo ou qualquer valor superior a 4 será ignorado. Não é recomendado usar quaisquer dados monetários formatados como entradas para qualquer cálculo.
Exemplo - um simples fetch
O exemplo seguinte mostra como usar as novas opções numa busca simples.
<?php
$username = 'myusername';
$password = '<password>';
$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);
?>
Exemplo - formatar o parâmetro de saída
Se um campo decimal ou numérico for devolvido como parâmetro de saída, o valor devolvido será considerado uma cadeia varchar regular. No entanto, se for especificado SQLSRV_SQLTYPE_DECIMAL ou SQLSRV_SQLTYPE_NUMERIC, pode definir FormatDecimals como true para garantir que não falta zero à esquerda para o valor numérico da cadeia. Para mais informações, por favor leia Como: Recuperar Parâmetros de Saída Usando o Driver SQLSRV.
O exemplo seguinte mostra como formatar o parâmetro de saída de um procedimento armazenado que devolve um valor decimal(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
}
Ver também
Formatação de Cadeias Decimais e Valores de Dinheiro (PDO_SQLSRV Driver)