Symfony JsonResponse:错误的Float精度

时间:2017-07-06 19:50:57

标签: php symfony

Symfony\Component\HttpFoundation\JsonResponse似乎有一个奇怪的反应。

我从对象列表中检索一个Doctrine“decimal”参数,然后尝试使用JsonResponse发送它们的数组。但是十进制值不是我预期的那个,“精度”真的很奇怪,我无法绕过它:

我的实体:

...

/**
 * @var float Local average Grade
 * @ORM\Column(type="decimal", nullable=true, precision=4, scale=2)
 */
private $grade;

...

对于此示例,我将仅使用我的数据的单个结果。 当我从数据库中读取它时,我可以按预期阅读:8.30

以下是我所做的测试:

var_dump(gettype($local->getGrade()));
var_dump($local->getGrade());
var_dump((float) $local->getGrade());
var_dump(round($local->getGrade(), 2));


return new JsonResponse([
    'grade' => $local->getGrade(),
    'roundedGrade' => round($local->getGrade(), 2)
]);

结果如下:

string(6) "string"
string(4) "8.10"
float(8.1)
float(8.1) 

{
    "grade":8.0999999999999996447286321199499070644378662109375,
    "roundedGrade":8.0999999999999996447286321199499070644378662109375
}

对我来说没有意义。有没有人知道这里发生了什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

echo number_format((float)$local->getGrade(), 2, '.', ''); //8.10