$str = "2408570.45";
{ "num": 2408570.45 }
<?php
$price = 2408570.45;
echo $price . '<br>';
echo json_encode([ 'price' => $price ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
2408570.45
{ "price": 2408570.450000000186264514923095703125 }
2408570.45
{ "price": 2408570.45 }
2408570.45
{ "price": "2408570.45" }
<?php
$price = 2408570.45;
echo $price . '<br>';
echo json_encode([ 'price' => $price ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
2408570.45
{ "price": 2408570.450000000186264514923095703125 }
2408570.45
{ "price": 2408570.45 }
2408570.45
{ "price": "2408570.45" }
json_decode(file_get_contents('php://input'), true);
<token>
jQuery.prototype === jQuery.fn // Получишь true
К слову, если зайдешь на любой крупный интернет-магазин, да хоть на тот же ДНС и посмотришь отдаваемые ими JSON, то увидишь что и они не видят ничего плохого в том, чтобы отдать цену внутри JSON именно как число:
https://www.dns-shop.ru/product/microdata/0a12c59e...
Это просто пример того, что это обычная распространённая практика. Вот за годы работы со многими API взаимодействовал и почему-то везде цена внутри JSON отдается именно числом, а не строкой.