数字的反转符号存储为字符串

时间:2013-08-16 18:24:20

标签: php

这是一项微不足道的操作,但它揭示了一些棘手的问题。 我在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' - 负零作为字符串。

关于最佳方法的建议?

5 个答案:

答案 0 :(得分:1)

尝试一下:

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

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

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

答案 1 :(得分:1)

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

$signReversed = "" . (-$stringNumber);

答案 2 :(得分: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"

答案 3 :(得分:0)

这样的事可能

$vals=array('234.00','-234.00','0');
$newvals=array();
foreach($vals as $val){
    $tmpval=$val*-1;
    array_push($newvals,"$tmpval");
}
var_export($newvals);

答案 4 :(得分:0)

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