4

PHP OCIを使用してOracleデータベースからフェッチを実行すると、1未満の数値は次のように表示され.XXXXXX,ます.249999。明示的0.XXXXXXに使用するようにすべてのクエリを変更せずに、これを他の形式に設定する方法はありますか?to_char()(おそらくいくつかのセッションパラメータを介して?)

4

4 に答える 4

2

PHPを使用すると、floatに変換することで、簡単に0を追加できます。

$a = '.249999';
echo (float) $a;

つまり、あなたはあなたの数を変換することができます

$row['number'] = (float) $row['number'];

DBからフェッチした後。

于 2010-11-26T11:00:00.960 に答える
0

php / oci-extensionソースコードを変更する以外に、あなたが求めていることをグローバルに行う方法はありません。この動作の理由は、oracle ociが結果の0を省略し、phpが列のデータ型に応じてキャストを実行せずにすべての結果をociから文字列に変換するためです。SQL * Plusの結果でも、デフォルトでは0が省略され、set numformat列のフォーマットをカスタマイズして0を付加するには、SQL*Plusのフォーマットを呼び出す必要があります。

現在、この動作を変更するために設定できるセッション変更パラメーターはありません。

これを回避する最も一般的な方法は、クエリのラッパーを使用して数値列をチェックし、数値列の値をまたはis_numericでフォーマットすることです。うまくいけば、アプリケーションはすでにストックphp oci関数のラッパーを使用しているので、1か所で変更を加えることができます。number_formatsprintf

于 2010-11-30T21:09:26.810 に答える
0

複数行の小数を修正する必要がある場合は、これを解決する関数を次に示します。

function fixDecimalNumbers(array $fetchedDataset)
{
    //workaround for Oracle driver not returning leading zero on decimal numbers between -1 and 1 -.-
    foreach($fetchedDataset as $rownum => $row){
        foreach($row as $column => $value) {
            if(substr( $value, 0, 2 ) === '-,' && is_numeric(substr( $value, 2, 1 ))){
                $row[$column] = '-0' . substr( $value, 1);
                error_log($column);
                error_log($value);
            }
            else if(substr( $value, 0, 1 ) === ',' && is_numeric(substr( $value, 1, 1 ))){
                $row[$column] = '0' . $value;
            }
        }
        $fetchedDataset[$rownum] = $row;
    }
    return $fetchedDataset;
}
于 2020-10-27T14:55:40.370 に答える
0

最も単純なオプション$a='.249999'; エコー($ a * 1);

于 2021-07-29T16:23:31.823 に答える