当我做这个类型转换时:
(float) '0.00';
Run Code Online (Sandbox Code Playgroud)
我得到0.我如何得到0.00并仍然将数据类型作为浮点数?
Den*_*ret 79
您没有0或0.00:这些是内部(IEEE754)二进制格式的不同表示.
如果要将浮点数表示为"0.00",则需要使用number_format将其格式化为字符串:
$numberAsString = number_format($numberAsFloat, 2);
Run Code Online (Sandbox Code Playgroud)
据我所知,PHP没有解决方案.在这个帖子中给出的所有其他(上面和下面)答案都是无稽之谈.
number_format函数返回一个字符串,其结果与PHP.net自己的规范中所写的一样.
像floatval/doubleval这样的函数如果给出值为3.00,则返回整数.
如果你打字,那么你会得到一个整数作为结果.
如果你使用round()那么你会得到一个整数作为结果.
我能想到的唯一可能的解决方案是使用您的数据库进行类型转换浮动.MySQL例如:
SELECT CAST('3.00' AS DECIMAL) AS realFloatValue;
Run Code Online (Sandbox Code Playgroud)
使用抽象层执行此操作,该抽象层返回浮点数而不是字符串.
如果您正在寻找一个解决方案来修复您的JSON输出以保持2位小数,那么您可以使用后面的格式,如下面的代码:
// PHP AJAX Controller
// some code here
// transform to json and then convert string to float with 2 decimals
$output = array('x' => 'y', 'price' => '0.00');
$json = json_encode($output);
$json = str_replace('"price":"'.$output['price'].'"', '"price":'.$output['price'].'', $json);
// output to browser / client
print $json;
exit();
Run Code Online (Sandbox Code Playgroud)
返回客户端/浏览器:
{"x":"y","price":0.00}
Run Code Online (Sandbox Code Playgroud)
0.00实际为0.如果在回显时需要0.00,只需使用number_format:
number_format($number, 2);
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以显示浮点数
IE
$myNonFormatedFloat = 5678.9
$myGermanNumber = number_format($myNonFormatedFloat, 2, ',', '.'); // -> 5.678,90
$myAngloSaxonianNumber = number_format($myNonFormatedFloat, 2, '.', ','); // -> 5,678.90
Run Code Online (Sandbox Code Playgroud)
请注意,该
第一个参数是您要格式化的浮点数
第二个参数是小数位数
第三个参数是用于在视觉上分隔小数的字符
第四个参数是用于在视觉上分隔数千个的字符
| 归档时间: |
|
| 查看次数: |
113473 次 |
| 最近记录: |