【问题标题】:PHP: string with decimals strips decimals when converting to floatPHP:带小数的字符串在转换为浮点数时会去除小数
【发布时间】:2012-05-25 03:10:39
【问题描述】:

使用函数 floatval() 我尝试将带小数的字符串转换为浮点数,但它没有给我想要的结果。代码如下:

$price_calc = str_replace(',','.',$price); $reduction_calc = str_replace(',','',$reduction); $reduction_calc = '1.'.$reduction; $price_calc = floatval($price_calc); $reduction_calc = floatval($reduction_calc); $oldprice = $price_calc * $reduction_calc;

这段代码来自我正在构建的一个抓取器,它获取价格 ($price) 和减少百分比 ($reduction)。根据该价格和降价,我正在尝试计算旧价格。

在能够进行计算之前,我必须将 $price 和 $reduction 都转换为浮动。这就是它出错的地方

问题是,例如当 $reduction 是 51 时,值 $reduction_calc 应该是 1.51 。由于某些奇怪的原因,在应用 floatval() 之后,变量 $reduction_calc 变成了 1。

有人知道为什么吗?提前致谢!

【问题讨论】:

  • $reduction_calc = floatval(str_replace(',', '.', str_replace('.', '', $reduction_calc))); 为什么要用` ` 替换.,然后用. 替换,(如果$reduction 为51 ie,则字符串中不存在)?跨度>
  • 这是一个错误。它应该以不同的方式更换。由于它是抓取的内容,因此当百分比中出现逗号时,我希望有某种回退。我应该只替换逗号。我现在已经改变了(上面更新了代码),但结果是一样的。

标签: php string floating-point decimal


【解决方案1】:

试试这个:

$reduction_calc = floatval($reduction_calc);

【讨论】:

  • 谢谢,但我已经尝试过了,不幸的是它给出了相同的结果。
【解决方案2】:

您的 $reduction$price 字符串中可能有前导/尾随空格 在您的脚本之前添加此代码

$reduction = trim($reduction);
$price = trim($price);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 2020-08-29
    • 1970-01-01
    • 2019-06-03
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多