我有以下php代码段
<body>
<img id="Logo" src="" alt="Correct Image">
<script>
// Just determine the appropriate source:
var d = new Date();
var Today = d.getDate();
var Month = d.getMonth();
var src;
if (Month === 4 && (Today >= 21 && Today <= 23)) {
src = "/images/holiday.png";
} else {
src = "/images/default.png";
}
// And then set the image to it:
document.getElementById("Logo").src = src;
</script>
</body>
输出:
$newData = serialize(array('ep' => 50733372961735.4));
echo "New data: " . print_r($newData, 1);
但我想浮动值不是E + 13.
如果不做大幅改动,我该怎么办,因为这只是一个例子。在我的实际代码中,'ep'值可能在复杂的数组层次结构中
答案 0 :(得分:1)
首先,一般说明:序列化不应该用于可以以任何方式操作的数据。它对于会话数据和缓存这样的东西很有用,但不应该依赖于在应用程序或数据存储之间传输数据。在许多情况下,您最好使用像JSON这样的标准序列化格式。
您当然也不应该关心序列化字符串的外观 - 仅您应该对该字符串执行的操作将其传递回{{1 }}。因此,如果在反序列化时它返回的实际值是你想要的那个,那么unserialize()
这个事实不是问题。
但是,在您的示例中很明显您丢失了精度 - 最后的数字是E+13
而不是...29617
- 所以回到这一点:有一个PHP设置{{ 1}},described in the manual here。它的默认值多年来一直不同,但将其设置为-1以外的显式值将序列化具有该数字的有效数字的浮点数:
...29617354
请注意,第一个示例清楚地丢弃了信息,而第二个示例实际存储的精度比您实现的更高 - 因为the inaccuracy of storing decimals in binary floating point format。
答案 1 :(得分:0)
问题不在于序列化!
一般来说是数字。
$num = 50733372961735.4;
print($num);
=> 50733372961735
要“解决”这个问题你可以使用:
ini_set('serialize_precision', 15);
答案 2 :(得分:-1)
我刚刚在www.writephponline.com上执行了您的代码
如果我没有将你的值放在字符串中,我得到了以下值: - $newData = serialize(array('ep' => 50733372961735.4));
新数据:a:1:{s:2:&#34; ep&#34 ;; d:50733372961735.398;}
在将其添加到字符串中之后: - $newData = serialize(array('ep' => '50733372961735.4'));
新数据:a:1:{s:2:&#34; ep&#34 ;; s:16:&#34; 50733372961735.4&#34 ;;}