2012-07-19 19 views
1

這就是我想做的事:複雜的PHP數學轉換,在一行

變量$input可以等於任何下列值:-2-1012

我需要處理這個輸入,以便唯一可能的結果是-101。數字應該轉換爲最接近的數字,所以-2將變成-1,2將變成1,但是10-1都將保持原樣。

我知道如何使用多行來做到這一點,但我相信有一些方法可以將一些計算嵌套在一起。

這有道理嗎?讓我知道我是否應該澄清。

+5

如果需要,可以將整個程序放在一行上。這並不是一個好主意...... – 2012-07-19 05:11:16

+0

在這種情況下,這是一個好主意。 – Jake 2012-07-19 05:12:04

+1

永遠不要以爲你在做什麼是一個「好主意」。雙方總是有理由(除了在線樣式),你可能沒有考慮過。在這種情況下,可讀性可能就是其中之一。 – Jon 2012-07-19 05:13:02

回答

8

如果你知道你肯定會得到的只有這些值,你可以使用:

<?php 
$value = max(-1, min(1, $value)); 
?> 

我通常以防萬一明確地將這些爲整數。

<?php 
$value = max(-1, min(1, intval($value))); 
?> 
+0

+1簡潔,甜美,功能完美。 – Jon 2012-07-19 05:14:04

+0

這幾乎完全正確。使用-2和2可以將這些值取出。我把它切換到'max(-1,min(1,$ value));'並且它工作得很好。 – Jake 2012-07-19 05:20:16

+0

啊好點。我已經改變了答案來反映你的問題值。 – ifunk 2012-07-19 05:25:21

0

如果你有GMP擴展,你可以使用:

int gmp_sign(resource $a); 

像這樣:

<?php $value = gmp_sign($value); ?> 

如果你不具備GMP擴展,那麼你可以創建一個這樣的功能如下:

<?php 
function sign($number) { 
    return ($number > 0) ? 1 : (($number < 0) ? -1 : 0); 
} 

Sinc e -2和-1的符號是負數,上述函數將返回-1。符號是1和2是正數,所以上述函數將返回1. 0沒有符號,所以上述函數將返回0.