【发布时间】:2021-10-11 11:08:23
【问题描述】:
我正在尝试将表单中的数据存储在 .json 文件中。输入值是字符串,我将它们转换为数字:
$pooldata = [];
$pooldata['Free chlorine'] = floatval(round($_POST['fcl'], 3));
$pooldata['Total chlorine'] = floatval(round($_POST['tcl'], 3));
$pooldata['Combined chlorine'] = floatval( round($_POST['tcl'], 3) - round($_POST['fcl'], 3) );
$id = 'id_'.$pooldata['Date'];
$poolfile = 'data/'.$id.'.json';
$jsonData = json_encode($pooldata, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);
file_put_contents($poolfile, $jsonData);
echo $pooldata['Free chlorine'].'<br />';
echo $pooldata['Total chlorine'].'<br />';
echo $pooldata['Combined chlorine'].'<br />';
回声给了我这个输出
1.65 // free chlorine
1.85 // total chlorine
0.2 // combined chlorine (= total chlorine - free chlorine)
但我的 json 看起来像这样:
{
"Free chlorine": 1.6499999999999999,
"Total chlorine": 1.8500000000000001,
"Combined chlorine": 0.20000000000000018
}
应该是这样的:
{
"Free chlorine": 1.65,
"Total chlorine": 1.85,
"Combined chlorine": 0.2
}
我做错了什么?
【问题讨论】:
-
在
round()之后,某些东西已经是一个数字,所以floatval()毫无用处。请注意,round()可以帮助您选择舍入类型。对于所有意图和目的,1.6499999999999999等同于1.65。为什么要后者?