【问题标题】:Can't get string numbers to become float or integer PHP无法将字符串数字变为浮点数或整数 PHP
【发布时间】:2013-12-08 21:40:21
【问题描述】:

我正在尝试使用 PHP 解析 csv 文件,只要我将数字保留为字符串,一切正常。但是,由于我想对嵌套数组的值求和,所以我需要它们是数字。

我需要修复三个值:

  • $column[1] 是 cost 并且包含小数(例如 20.30)
  • $column[2] 是点击次数(例如 15)
  • $column[3] 是转化次数(例如 3)

如果我尝试对它们返回 0 的值使用 floatval() 或 intval()。

示例:$cost = intval($column[1]);

我在另一个线程的某个地方看到他们使用 trim() 或 ltrim() 来清理值。所以我在我的号码上试了一下......

  • $cost = intval(trim($column[1]));
  • $clicks = intval(trim($column[2]));
  • $conversions = intval(trim($column[3]));

但这只是给了我数字的第一个数字,所以我得到了这个..

  • 成本:2(而不是 20.30)
  • 点击次数:1(而不是 15 次)
  • 转化次数:3(实际上是正确的)

我尝试过同时使用“.”和“,”作为小数。

真的想不通这个。非常感谢我能得到的任何帮助!

结构:

array(4) {
    [0]=> string(21)"avslag l�n"[1]=> string(11)"31.32"[2]=> string(3)"1"[3]=> string(5)"0 "
}
array(4) {
    [0]=> string(45)"l�na trots kronofogden"[1]=> string(11)"99.12"[2]=> string(3)"2"[3]=> string(5)"0 "
}
array(4) {
    [0]=> string(59)"g�r gymnasiet men vill ta l�n"[1]=> string(11)"33.86"[2]=> string(3)"1"[3]=> string(5)"0 "
}
array(4) {
    [0]=> string(45)"l�n till enskild firma"[1]=> string(11)"80.07"[2]=> string(3)"1"[3]=> string(5)"1 "
}

【问题讨论】:

  • 你能把 var_dump($column) 的结果贴出来吗?
  • 看起来你的值中可能有一些不可见的字符(例如空值)......你能做一个值的十六进制转储吗?
  • 大声问,你会收到的。您可以编辑您的帖子并将其转换为代码格式,方法是全部选中并点击CTRL+K
  • 鉴于 string(11) "33.86" 是 5 个可见字符但长度为 11 个字节,那么字符串中肯定有不可见字符...尝试使用 str_replace("0x00",'',$value) 去除任何 null 字节.... 对值进行十六进制转储将确认不可见字符的细节
  • 如何找到并移除隐藏字符?

标签: php


【解决方案1】:

您可以按如下方式键入转换值:

$cost = (double) $column[1];
$clicks = (int) $column[2];
$conversions = (int) $column[3];

http://www.php.net/manual/en/language.types.type-juggling.php

如果您要格式化双精度,请执行以下操作:

$cost = number_format($column[1], 2);

编辑:感谢 var_dump,试试这个。

$cost = (double) $column[0][1];
$clicks = (int) $column[0][2];
$conversions = (int) $column[0][3];

您正在尝试与二维数组进行交互,就好像它是一维的一样。

【讨论】:

  • 是的。我用 Drupal 模块来做这件事,效果很好。
  • 如果我这样做,它们都会变成 0。
  • var_dump($column[1]); 给你什么?
  • 所有成本值作为字符串... string(11) "31.32" string(11) "99.12" string(11) "33.86"
  • 您正在尝试计算一整列。您需要以二维数组的形式与数据进行交互。 $column[0][1] 等查看我的编辑。
【解决方案2】:

将数字格式与 floatval 一起使用

$cost = floatval(column[1]);
$cost = number_format($cost, 2);

http://php.net/manual/en/function.number-format.php

【讨论】:

  • 也试过了,但什么也没给我 ("")。
【解决方案3】:

如果$column[1] 的值为"20.30",您可以简单地将其用于计算,因为当您进行关节炎计算时,php 会自动将字符串转换为数字。 例如:

$column[1]="20.30";//$column[1] is string.
$column[1]*=1.0;//Now $column[1] is an float variable..

您还可以使用类型转换,例如:

$a=(float)$column[1]*1;

等等..

【讨论】:

    【解决方案4】:

    可能错了...在这种情况下,我显然有赌博问题...但我相当肯定您正在尝试做所有这些实际 array() 上的转换,而不是 string

    您的打印输出显示了 4 个不同的数组,每个数组都有键/值对。所有这些都链接到$column

    如果我不得不猜测,我不应该在 Stack Exchange 上做,我会说试试这个:

    $column[1][1]
    

    而不是你现在拥有的

    $column[1]
    

    我已经醒了很长时间了,所以这里要带一粒盐。

    【讨论】:

    • 如果类型转换对他不起作用,这可能是唯一可能导致问题的原因。 :D 很好地发现了这一点。
    • $column[1][1] 实际上让我得到了成本编号的第一位。因此,如果我这样做 $cost = $column[1][1] 。 $column[1][2] 我得到前 2 个数字:S
    • 好吧,奇怪的是,它与 [1] 和 [2] - [1] = "31.32" 和 [2] = "1" 的实际第一个数字一致,这两种方式都会给出 31 哈哈这当然仍然很奇怪,因为唯一的意义是只检索两者的第一个数字哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多