2017-01-10 7 views
1

私のapiは、顧客に課金されるためDBにコミットする前に、サブスクリプション料金に関連するすべてのデータを正しい形式にする必要があります。以下の規則が適用されます。PHP費用の小計2小数点以下の桁数を確認する

  1. 通貨記号のない数字である必要があります。検証を使用してis_string($data['cost'])
  2. 負の数値にすることはできません。 $data['cost'] < 0
  3. 額にセント($ 100.00)がない場合でも、小数点以下は2桁でなければなりません。

要件3を検証する最善の方法はありますか?

+0

どのような列を使用していますか? – Chris

+0

すべての通貨額にDECIMALを使用します。 – Runicode

+1

「100」か「100.00」を送っても何が問題になりますか?いずれにせよ '100.00 'として保存するつもりです...あなたはあなたのAPIを使いにくくしています。 – Chris

答えて

1

かなりまっすぐ進むことに決めました。コストに小数点が含まれている場合は、右にいくつの場所を確認します。それ以外の場合はDBにコミットします。

$amount = explode('.', $data['cost']); 
if(isset($amount[1]) && strlen($amount[1]) > 2) { 
    // response 
} 
0

number_format()を使用してください。検証のためにこれを使用するには、

:何を得るに関係なく(十分ではありません0またはあまりにも多くの0)、それが正しい形式で

number_format("1000000",2) // 1,000,000.00 

編集をして保存すること利点があります

$num = $data['cost']; $check = number_format($num,2); if ($num == $check) return true; 
+0

質問は検証についてです。あなたのコードは基本的に逆です:すべてが通過するようにしてください。 –

+0

@ÁlvaroGonzález - _ "金額にセント($ 100.00)がない場合でも、小数点以下は2桁でなければなりません。" _したがって、OPでは常に小数点以下2桁まで入力する必要がありますか? – amflare

+0

それは私が理解するものです。 '100.235'をブロックすることについての質問の下にあるOPのコメントを確認してください。 –

関連する問題