2016-04-28 7 views
2

値を持つ非表示フィールドがあります。それは隠しフィールドなので、私の値は文字列です。私のデータベースでは、値は小数点以下2桁の精度で格納されます。PHPで文字列を浮動小数点に変換できません - Laravel 5.2

ビュー

<tr class="grand-total"> 
    <th>Total incl. 21% BTW:</th> 
    <?php $total = number_format($cartTotal, 2, ',', '') ?> 
    <td><strong class="grey-color">&euro;{{$total}}</strong></td> 
</tr> 

<input type="hidden" name="total" value={{$total}}> 

コントローラ

私の合計がある場合には、例えば、€10.95、私は€10.00を取得します。

(float)$request->total 

floatval($request->total) 

floatval($request->total * 1.00) 

をしかし、これらすべては€10を返す:

物事は私が試してみました。

+0

合計は「10,95」または「10.95」ですか? – Aurel

+0

'10,95'は無効な指定です。有効な読書だけが「10.95」に変更されました。保留中の編集。 –

答えて

2

あなたは小数から独立した整数にドットを使用して浮動小数点数ではなく、カンマを提供しなければならないので、あなたが入力10.95の代わり10,95なければなりません。

明らかにあなたはまだコンマを使用したい場合は、str_replaceを使用することができます。これは、直接の質問に答えていませんが

$myNumber = floatval(str_replace(',', '.', $myNumber)); 
3

を、それは確かに、より長期的な方法でそれを解決します。

はお金を保存するない10進の量を検討 - そう$10.00は、実際にはデータベース内の1000として格納されています。

money formatのようなPHP内の組み込み関数を使用して、現地通貨を設定してこの問題を頭に釘付けにすることもできます。

What are the downsides to storing money values as cents/minor units?

+1

これは良い答えです。私は自分のアプリケーションを構築するときにそれを検討していた。しかし、私の計算がかなり複雑になるので、私はそれに向かなかった。しかし、次回は試してみるべきかもしれません。 – Christophvh

+1

計算が複雑になればなるほど、浮動小数点数からさらに離れる必要があります。ちょうど私の2セント(小切手を赦してください) – Chris

関連する問題