当我进行这种类型转换时:
(float) '0.00';
我得到 0
。如何获得 0.00
并且数据类型仍然为浮点数?
原文由 StackOverflowNewbie 发布,翻译遵循 CC BY-SA 4.0 许可协议
当我进行这种类型转换时:
(float) '0.00';
我得到 0
。如何获得 0.00
并且数据类型仍然为浮点数?
原文由 StackOverflowNewbie 发布,翻译遵循 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 许可协议
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答694 阅读✓ 已解决
2 回答2.3k 阅读
1 回答687 阅读✓ 已解决
浮点数没有
0
或0.00
:它们是内部( IEEE754 )二进制格式的不同字符串 表示 形式,但浮点数是相同的。如果要将浮点数表示为“0.00”,则需要使用 number_format 将其格式化为字符串: