2016-04-28 32 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.00实际上存储为1000在您的数据库中。

您还可以使用PHP内置函数(如money format),只要将您的本地货币设置为真正解决此问题即可。

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

+1

这是一个很好的答案。我在构建应用程序时正在考虑它。但我没有去做,因为我的计算会非常复杂。但也许它应该下次尝试。 – Christophvh

+1

我认为计算越复杂,你应该远离浮标,只是我的2美分(赦免双关语) – Chris

相关问题