如何解决PHP将带空格的字符串数字转换为Float
我有一个类别为varchar(100)
的班级。它以1 000.00
的形式存储在数据库中(不要问我为什么,不是我的主意),我必须检索它并除以其他价格,该价格也可以从数据库中检索出来。
数据库中的数字看起来像:1 000 000.00
-数千个部分之间用空格分隔(一百万个看起来像-> $a = "3 999.99";
$b = "1 500.11";
$aa = floatval(str_replace(' ','',$a));
$bb = floatval(str_replace(' ',$b));
$c = $aa - $bb;
echo $aa . ' - ' . $bb . ' = ' . $c;
)。
我在带有在线解释程序的网站:w3resource.com/php上尝试过。
我要做的是...
3999.99 - 1500.11 = 2499.88
并显示正确的输出:
$a = "3 999.99";
$b = "1 500.11";
$aa = floatval(str_replace(' ',$b));
$c = $aa - $bb;
echo $aa . ' - ' . $bb . ' = ' . $c;
但是当我在项目中执行此操作时,就像:
3999.99 - 1500.11 = 2.00
3 - 1
在我的项目中,价格被截断-空格被截断并且仅对前几位执行计算之后的所有内容,在我的情况下为:{{1}}
有人可以告诉我在哪里寻找错误吗?
解决方法
很可能您有一个不可见的字符作为千位分隔符。清理输入字符串时,过滤除数字和.
以外的所有字符更为安全。这可以通过preg_replace
函数来实现。
您的脚本可以修改为如下形式:
$a = "3 999.99";
$b = "1 500.11";
$aa = floatval(preg_replace('/[^0-9.]/','',$a));
$bb = floatval(preg_replace('/[^0-9.]/',$b));
$c = $aa - $bb;
echo $aa . ' - ' . $bb . ' = ' . $c;
此外,特别是在处理钱时使用浮点数有点危险且不精确。请查看该存储库,该存储库对解决此问题有很大帮助:https://github.com/moneyphp/money
,最大的错误是price
与varchar(100)
一样-它是string
,可以百万种方式显示,但无法重新计算。没有任何借口。它应该是integer
或decimal
,并且任何减法都应使用SQL进行。
第二个错误是当您使用float
作为price
的值时。将PHP float
留给天体物理学家,使用int
。
$a = "3 999.99";
$b = "1 500.11";
$a1 = (int) preg_replace('/[^0-9]/',$a);
$b1 = (int) preg_replace('/[^0-9]/',$b);
var_dump($a1,$b1); // test
echo'<hr>';
$c1 = $a1 - $b1;
var_dump($a1,$b1,$c1); // test
要显示的格式:
echo substr_replace(substr_replace($c1,' ',-5,0),'.',-2,0);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。