0

这是一个微不足道的操作,但它揭示了一些棘手的问题。我在 PHP 中有一个字符串,比如说'234.00'. 我想将其转换为负数,最好最后得到一个字符串。所以测试用例应该

'234.00'  ==> '-234.00'
'-234.00' ==> '234.00'
'0.00'    ==> '0.00'

原始代码是

$signReversed = $stringNumber * -1.0

但这有问题,因为我真的需要一个字符串来与其他代码保持一致。所以我尝试了

$signReversed = strval($stringNumber * -1.0)

但这在最后一个测试用例中失败了,因为我得到'-0'了 -- 负零作为字符串。

关于最好的方法的建议?

4

5 回答 5

1

试试这个:

$stringVal = "234.00";
$negativeStringVal = strval(floatval($stringVal) * -1);

我认为您的问题是 PHP 尝试将您的数字转换为int但由于小数而失败。

编辑:PHP 小提琴:http://phpfiddle.org/main/code/iay-rsc

于 2013-08-16T18:27:28.113 回答
1

为什么不直接使用一元否定运算符 (-)?

$signReversed = "" . (-$stringNumber);
于 2013-08-16T18:27:42.483 回答
1

那这个呢

应该适用于小数字,大数字和字符串可以包含 NULL 字节

function flipSign($stringNummer) {
   if ((string)$stringNummer !== $stringNummer) // fast !is_string check
      throw new Exception('input should be a string');
   return number_format($stringNummer * -1, 2, '.', '');
}

/**
 * NULL byte test 
 */
var_dump(flipSign("00\0.10"));   // string(5) "-0.10" 
var_dump(flipSign("-00\0.10"));  // string(4) "0.10"

var_dump(flipSign("00.10"));   // string(5) "-0.10" 
var_dump(flipSign("-00.10"));  // string(4) "0.10"

var_dump(flipSign("234.00"));   // string(7) "-234.00 
var_dump(flipSign("-234.00"));  // string(6) "234.00"

var_dump(flipSign("234.20"));   // string(7) "-234.20"
var_dump(flipSign("-234.20"));  // string(6) "234.20" 

var_dump(flipSign("100000.20"));   // string(10) "-100000.20"
var_dump(flipSign("-100000.20"));  // string(9)  "100000.20"
于 2013-08-16T18:35:20.333 回答
0

像这样的东西

$vals=array('234.00','-234.00','0');
$newvals=array();
foreach($vals as $val){
    $tmpval=$val*-1;
    array_push($newvals,"$tmpval");
}
var_export($newvals);
于 2013-08-16T18:28:00.270 回答
0

尝试$signReversed = strval(floatval($stringNumber) * -1.0)

于 2013-08-16T18:28:42.813 回答