插入数据库时​​,php round无法正常工作

时间:2018-04-17 06:51:59

标签: php mongodb decimal

我遇到圆形和插入数据库的问题。 执行以下操作并尝试将$ y插入Mongo将插入多个小数(类似于下面的var_export所示)。

我如何解决这个问题,因为我需要精确到2位小数。

<?php

$y = round(348.78 + 348.78 * 19/100, 2 );

var_dump($y);
var_export ($y);

这只是为了显示插入Mongo的方式的差异。

float(415.05)
415.05000000000001

2 个答案:

答案 0 :(得分:0)

Float数据类型不是表示高精度数字的好选择。十进制是为此而制作的。

请参阅here如何(和为什么)在mongoDB

中使用十进制数字

答案 1 :(得分:0)

var_export的php文档有一个有趣的评论:

  

从版本5.4.22看起来var_export使用了   serialize_precision ini设置,而不是使用的精度   用于浮点数的正常输出。结果是因为   例如版本5.4.22将输出var_export(1.1)   1.1000000000000001(17是默认精度值),而不是之前的1.1。

显示浮点数的默认精度为14(参见manual)。使用ini_set将serialize_precision更改为相同的值,您将获得所需的结果:

ini_set('serialize_precision', 14);
$y = round(348.78 + 348.78 * 19/100, 2 );

var_dump($y);
var_export ($y);

输出:

float(415.05)
415.05