2

我有两个数字类型的字符串,但结果出错了。

$totalamount='41,305.33';
$normalamount='999.72';
echo $total=$totalamount-$normalamount;

有没有其他方法可以做到这一点或我自己的代码有问题。

4

6 回答 6

2

这是 的反向函数number_format()

解决方案:

function number_unformat($number, $dec_point = '.', $thousands_sep = ',') {
    return (float)str_replace(array($thousands_sep, $dec_point),
                              array('', '.'),
                              $number);
}

$totalamount  = number_unformat('41,305.33');
$normalamount = number_unformat('999.72');
$total        = $totalamount - $normalamount;
echo $total;

输出:

40305.61
于 2012-10-19T07:35:48.137 回答
2

由于“,”字符,您得到了错误的值,只需删除它们...

$totalamount='41,305.33';
$normalamount='999.72';
echo (double)str_replace(',','',$totalamount)-
     (double)str_replace(',','',$normalamount);
于 2012-10-19T07:36:15.233 回答
2

错误的原因是字符串上有逗号。

$totalamount = floatval(str_replace(',', '','41,305.33'));
$normalamount = floatval(str_replace(',', '','999.72'));
echo $total = $totalamount-$normalamount;

顺便说一句,doubleval() — 的别名floatval()

于 2012-10-19T07:34:57.007 回答
1

您可以使用floatval()来实现您正在寻找的东西,但您需要从字符串中删除“,”:

$totalamount = str_replace(',' , '', '41,305.33');
$normalamount = '999.72';
echo $totalamount - $normalamount;

// Writes: 40305.61
于 2012-10-19T07:37:53.767 回答
0

只需删除逗号,它就会按预期工作。无需手动将字符串转换为数字,因为减号运算符为我们完成了这项工作。

<?php
$totalamount='41305.33';
$normalamount='999.72';
echo $total=$totalamount-$normalamount;

'41,305.33'-'999.72'导致的原因-958.72是因为 PHP 一看到逗号,就会认为它是无效数字并修剪掉剩余的字符。因此,您只剩'41'-'999.72'下确实是-958.72

于 2012-10-19T07:48:47.587 回答
-1

您可以使用NumberFormatter将格式化的数字转换为 PHP 理解的数字

$fmt = numfmt_create('de_DE', NumberFormatter::DECIMAL);
echo $total = $fmt->parse('41,305.33') - $fmt->parse('999.72');
于 2012-10-19T07:58:51.317 回答