Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel模型在创建后使用了错误的整数,但在其他地方没有问题_Php_Sql_Laravel - Fatal编程技术网

Php Laravel模型在创建后使用了错误的整数,但在其他地方没有问题

Php Laravel模型在创建后使用了错误的整数,但在其他地方没有问题,php,sql,laravel,Php,Sql,Laravel,我有一个api连接到一个窗体,该窗体生成一个Laravel类的实例,将其保存到数据库中,并返回json: $record = $request->all(); $record['client_id'] = $client->id; $record['price'] = $record['price'] * 100; // price sent in pounds, needs converting to pence $newRecord = Cust

我有一个api连接到一个窗体,该窗体生成一个Laravel类的实例,将其保存到数据库中,并返回json:

    $record = $request->all();
    $record['client_id'] = $client->id;
    $record['price'] = $record['price'] * 100; // price sent in pounds, needs converting to pence

    $newRecord = CustomerServicePrice::create($record);
    return response()->json($newRecord->toJson());
我没有使用任何不寻常的laravel包或sql,一切都很正常,Innodb

因此,当
$record['price']
进入时,它被设置为一个字符串“2.30”--正如您所看到的,我的代码将它乘以100,然后保存到数据库中的整数列中

该记录被完美地记录到数据库中,如230所示。但是,出于某种原因,
$newRecord->price
将以229的价格发布。如果我通过另一个api获取记录并呈现它,它将正确呈现为230-只有在创建时,它才会返回不正确的229值,并且并非所有数字都是如此-如果我提交“2.40”,它将正确显示240,它仅与一些值隔离


如果你以前遇到过这个问题,我希望能得到一些帮助。

这似乎是一个舍入错误。因为它是以十进制形式输入的,所以数据库有一个浮点错误,可能会导致它有时四舍五入到229。我的建议是将命令强制转换为带

$record['price'] = (int) ($record['price'] * 100);
或者类似的东西,看看是否能解决问题


编辑:使用Round()尝试下面Beniamin H建议的方法。这似乎是一个舍入错误。因为它是以十进制形式输入的,所以数据库有一个浮点错误,可能会导致它有时四舍五入到229。我的建议是将命令强制转换为带

$record['price'] = (int) ($record['price'] * 100);
或者类似的东西,看看是否能解决问题


编辑:试试下面Beniamin H建议的使用Round()的方法。基本上,这是因为大多数编程语言和计算机通常是如何处理浮点数的。数字2.30不能精确地表示为2的幂和。例如在JS中:

'2.30' * 100
给出:

229.99999999999997
例如,你可以阅读更多关于它的信息

有许多解决方案,如舍入、使用专用数学库(如php)等。在您的案例中,很简单:

round($record['price'] * 100.0);

应该可以解决这个问题。

基本上,这是因为大多数编程语言和计算机通常是如何处理浮点数的。数字2.30不能精确地表示为2的幂和。例如在JS中:

'2.30' * 100
给出:

229.99999999999997
例如,你可以阅读更多关于它的信息

有许多解决方案,如舍入、使用专用数学库(如php)等。在您的案例中,很简单:

round($record['price'] * 100.0);

应该可以解决这个问题。

不幸的是,
当$record['price']
为'2.30',
(int)($record['price']*100)仍然给我229。我不知道这是为什么。不幸的是,
当$record['price']
是'2.30',
(int)($record['price']*100)仍然给我229。我不知道这是为什么。
dd($newRecord->price)
给出了类似于“(string)229”的东西?当你用heidisql/phpmyadmin这样的工具查看数据库时,值是230?罗兰,没错。真的很奇怪,不是吗?
dd($newRecord->price)
给出了类似“(string)229”的东西?当你用heidisql/phpmyadmin这样的工具查看数据库时,值是230?罗兰,没错。真奇怪,不是吗?