PHP浮点数为2位小数:.00

Sta*_*bie 41 php

当我做这个类型转换时:

(float) '0.00';
Run Code Online (Sandbox Code Playgroud)

我得到0.我如何得到0.00并仍然将数据类型作为浮点数?

Den*_*ret 79

您没有00.00:这些是内部(IEEE754)二进制格式的不同表示.

如果要将浮点数表示为"0.00",则需要使用number_format将其格式化为字符串:

$numberAsString = number_format($numberAsFloat, 2);
Run Code Online (Sandbox Code Playgroud)

  • 我不想要一个字符串.想要一个漂浮物.但是因为显然有0.00是无效的,所以我必须用"0.00"或0来做. (8认同)
  • 格式化后我们无法保留浮点数据类型。因此,根据问题,答案不是有效的。 (3认同)
  • @SeniorPHPDeveloper 老实说我很困惑你在说什么。您 2020 年的评论说这“不是有效的答案”,这意味着您认为不同的答案*会*有效;但您似乎同意“将数据类型保持为浮点型”的要求是不可能的;所以*唯一*可能的答案是讨论字符串表示,这就是这个答案的作用。那么你到底想表达什么观点呢? (2认同)

Tim*_* B. 9

据我所知,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输出修改

如果您正在寻找一个解决方案来修复您的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)


Aur*_*osa 6

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)

请注意,该

第一个参数是您要格式化的浮点数

第二个参数是小数位数

第三个参数是用于在视觉上分隔小数的字符

第四个参数是用于在视觉上分隔数千个的字符