63

当我进行这种类型转换时:

(float) '0.00';

我明白了0。我如何获得0.00并且仍然将数据类型作为浮点数?

4

12 回答 12

127

浮点数没有0or 0.00:它们是内部(IEEE754 )二进制格式的不同字符串表示,但浮点数是相同的。

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

$numberAsString = number_format($numberAsFloat, 2);
于 2012-10-03T10:25:42.627 回答
9

据我所知,PHP 没有解决方案来解决这个问题。此线程中给出的所有其他(上方和下方)答案都是胡说八道。

number_format 函数返回一个字符串作为 PHP.net 自己的规范中所写的结果。

如果你给出的值是 3.00,那么像 floatval/doubleval 这样的函数会返回整数。

如果你做 typejuggling 那么你会得到一个整数作为结果。

如果你使用 round() 那么你会得到一个整数作为结果。

我能想到的唯一可能的解决方案是使用您的数据库将类型转换为浮点数。以 MySQL 为例:

SELECT CAST('3.00' AS DECIMAL) AS realFloatValue;

使用返回浮点数而不是字符串的抽象层执行此操作,然后就可以了。


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();

返回客户端/浏览器:

{"x":"y","price":0.00}
于 2016-05-25T14:52:51.057 回答
6

0.00 实际上是 0。如果您需要在回显时使用 0.00,只需这样使用number_format

number_format($number, 2);
于 2012-10-03T10:26:15.457 回答
5

您可以显示浮点数

  • 有一定数量的小数
  • 具有特定格式(本地化)

IE

$myNonFormatedFloat = 5678.9

$myGermanNumber = number_format($myNonFormatedFloat, 2, ',', '.'); // -> 5.678,90

$myAngloSaxonianNumber = number_format($myNonFormatedFloat, 2, '.', ','); // -> 5,678.90 

请注意,

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

第二个参数是小数位数

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

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

于 2015-05-12T10:08:57.807 回答
2

使用该number_format()功能更改数字的显示方式。它将返回 a string,原始变量的类型不受影响。

于 2012-10-03T10:26:01.167 回答
0

你可以试试这个,它会为你工作

number_format(0.00, 2)
于 2012-10-03T10:27:57.633 回答
0

尝试这个

$nom="5695.5";
number_format((float)($nom), 2, '.', ','); // -> 5,695.50

$nom="5695.5215";
number_format((float)($nom), 2, '.', ','); // -> 5,695.52

$nom="5695.12";
number_format((float)($nom), 0, '.', ','); // -> 5,695
于 2021-04-08T18:00:06.630 回答
-1

您可以使用floatval()

浮点数()

于 2012-10-03T10:31:35.547 回答
-2

尝试这个

$result = number_format($FloatNumber, 2);
于 2019-07-23T06:02:37.580 回答
-2

您可以使用圆形功能

round("10.221",2);

将返回 10.22

于 2017-03-18T17:39:52.800 回答
-3

当我们格式化任何浮点值时,这意味着我们正在将其数据类型更改为字符串。因此,当我们对任何金额/浮点值应用格式时,它将设置所有可能的符号,如点、逗号等。例如

(float)0.00 => (string)'0.00',
(float)10000.56 => (string) '10,000.56'
(float)5000000.20=> (string) '5,000,000.20'

因此,从逻辑上讲,格式化后不可能保留浮点数据类型。

于 2017-06-07T08:17:37.813 回答
-3

您可以使用这个简单的功能。 number_format ()

    $num = 2214.56;

    // default english notation
    $english_format = number_format($num);
    // 2,215

    // French notation
    $format_francais = number_format($num, 2, ',', ' ');
    // 2 214,56

    $num1 = 2234.5688;

   // English notation with thousands separator
    $english_format_number = number_format($num1,2);
    // 2,234.57

    // english notation without thousands separator
    $english_format_number2 = number_format($num1, 2, '.', '');
    // 2234.57
于 2018-06-25T08:26:22.693 回答