PHP 浮点数,小数点后 2 位:.00

新手上路,请多包涵

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

 (float) '0.00';

我得到 0 。如何获得 0.00 并且数据类型仍然为浮点数?

原文由 StackOverflowNewbie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 756
2 个回答

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

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

 $numberAsString = number_format($numberAsFloat, 2);

原文由 Denys Séguret 发布,翻译遵循 CC BY-SA 4.0 许可协议

此页面上的许多评论都忽略了问题不正确的基本观点。浮点是一种 二进制 表示,专为高效计算而设计;它基本上没有任何类型的十进制数字的概念。

所以问这个:

如何获得“0.00”而不是“0”并且仍然将数据类型设为浮点数?

就像这样问:

我如何获得“deux”而不是“zwei”并且仍然使用英语?

无论您将输入指定为“2”、“2.0”还是“2.000000000”,如果您要求一个浮点值,则将存储在内存中的是以下内容(在 IEEE 754 双精度中):

010000000000000000000000000000000000000000000000000000000000000000

如果转换为整数,则存储在内存中的值是这样的(假设是 64 位系统):

000000000000000000000000000000000000000000000000000000000000000010

(请注意,在这种情况下,“整数”不仅仅是“整数”的同义词,它是一种特定的数据类型,对于如何在内存中表示值有自己的规则。)

相比之下,字符串“2”看起来像这样:

00110010

字符串“2.00”看起来像这样:

00110010001011100011000000110000

(在 PHP 程序中,内存中实际上会有额外的信息,例如类型的指示符,但这在这里并不真正相关。)


所以,这个问题 只能 通过将其改写为 转换 来回答:给定浮点数的 _输入_,我如何 _选择具有固定小数位数的字符串表示_。

正如其他人指出的那样,答案是使用 number_format


这个问题没有提到 JSON,但有几条评论提到了,所以我还要指出 PHP 的 json_encode 函数有一个选项 JSON_PRESERVE_ZERO_FRACTION ,它将格式化一个恰好是整数的浮点数尾随“.0”,例如:

 $example = ['int' => 2, 'float' => 2.0];
echo json_encode($example);
# => {"int":2,"float":2}
echo json_encode($example, JSON_PRESERVE_ZERO_FRACTION);
# => {"int":2,"float":2.0}

再次注意,这是值的 _字符串表示形式_。

原文由 IMSoP 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏