这是一项微不足道的操作,但它揭示了一些棘手的问题。
我在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'
- 负零作为字符串。
关于最佳方法的建议?
答案 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)