我需要打印一些数字,它们之间带有+和-。但是,我事先不知道哪个数字将为正,哪个数字将为负。目前,我这样回应他们:
echo "$a + $b + $c + $d + $e + $f";
让我们说$a
到$f
的值都是正数。我会得到类似:5 + 10 + 12 + 18 + 9 + 7
。
但是,如果某些值是负数,我将得到类似5 + -10 + 12 + -18 + 9 + - 7
的信息。在这种情况下,理想的输出应该是5 - 10 + 12 - 18 + 9 - 7
。
请不要因为我不想计算加法或减法的最终结果。我只想用正确的标志将其全部打印在网页上。
我可以通过编写6个嵌套的if()
块来做到这一点,但这似乎需要大量工作,并且每次都容易出错。我能做些什么来输出正确的信号吗?
答案 0 :(得分:2)
最简单的方法是更正最终字符串中的操作员外观:
std::string::~string()
如果这对您来说是可能的,那么它会尽快完成-没有循环(在php中),没有一次用条件处理每个数字。如果仍然循环播放,我建议使用$s = '5 + -10 + 12 + -18 + 9 + - 7'; // result of interpolation or concatenation
$s = str_replace('+ -', '- ', $s);
// => "5 - 10 + 12 - 18 + 9 - 7"
的@Phils建议-功能样式php-适应您的需求。
答案 1 :(得分:1)
需要像这样手动检查每个变量:
class Meta(type):
_foo = "original foo value"
@property
def foo(cls):
print("getting foo")
return cls._foo
@foo.setter
def foo(cls, value):
print("setting foo")
cls._foo = value
class Klass(metaclass=Meta):
pass
# this invokes the property methods
print(Klass.foo)
Klass.foo = "new foo value"
print(Klass.foo)
# this won't work, the property is not accessible via an instance of Klass
obj = Klass()
obj.foo # raises an AttributeError
答案 2 :(得分:1)
您可以使用php sprintf函数。
function formatNum($num){
return sprintf("%+d",$num);
}
或
function formatNum($num) {
$num = (int) $num; // or (float) if you'd rather
return (($num >= 0) ? '+' : '-') . $num; // implicit cast back to string
}
有关更多详细信息,请阅读:-http://php.net/manual/en/function.sprintf.php
答案 3 :(得分:1)
尝试
$a = 10;
$b=-20;
$text = $a." ".$b;
$text= str_replace(" ", "+", $text);
echo $text;
输出
10 + -20
答案 4 :(得分:1)
将数字放入数组中,并使用array_reduce
创建字符串
$numbers = [5, -10, 12, -18, 9, -7];
$first = array_shift($numbers);
echo array_reduce($numbers, function($str, $num) {
return $str . sprintf(' %s %d', $num < 0 ? '-' : '+', abs($num));
}, $first);
这样,您可以处理任意数量的数字,而无需在各处重复逻辑。