punteado
Tengo algunos flotadores:
-4.50
+6.25
-8.00
-1.75
¿Cómo puedo cambiar todo esto a flotantes negativos para que se conviertan en:
-4.50
-6.25
-8.00
-1.75
También necesito una forma de hacer lo contrario.
Si el flotador es negativo, conviértalo en positivo.
DrAlberT
un trivial
$num = $num <= 0 ? $num : -$num ;
o, la mejor solución, en mi humilde opinión:
$num = -1 * abs($num)
Como ha publicado @VegardLarsen,
la multiplicación explícita se puede evitar por brevedad, pero prefiero la legibilidad a la brevedad
Sugiero evitar if/else (o el operador ternario equivalente), especialmente si tiene que manipular varios elementos (en un bucle o usando un función lambda), ya que afectará al rendimiento.
“Si el flotador es negativo, que sea positivo”.
Para cambiar el signo de un número simplemente puedes hacer:
$num = 0 - $num;
o multiplícalo por -1, por supuesto 🙂
-
Ops, sí, lo siento, solo invertí el orden 🙂
– DrAlberT
17 de septiembre de 2009 a las 11:08
-
Ha, ok… por un segundo estuve dudando de mi propia cordura.
– Dan Tao
17 de septiembre de 2009 a las 11:10
-
¿Por qué debería tener más rendimiento obtener el valor absoluto de una variable, invertirlo y reasignarlo a esa variable sin importar el valor que tenga?
– Gumbo
17 de septiembre de 2009 a las 11:26
-
Podría estar equivocado, pero estoy bastante seguro de que, dado que está realizando una operación en ciertas condiciones ($num es positivo) y no en otras ($num = 0)? $numero: -$numero; ¿bajo el capó?
– Dan Tao
17 de septiembre de 2009 a las 11:36
-
Tienes razón, pero se realizaría a bajo nivel, en C. Por PHP, no en PHP.
– DrAlberT
17 de septiembre de 2009 a las 11:46
Vegard Larsen
$float = -abs($float);
-
“También necesito una forma de hacer lo contrario”, esta respuesta solo hace una cosa…
– Reengendrar
9 de julio de 2018 a las 12:07
-
@ReSpawN Para ser justos, lo contrario es literalmente tomar el
-
fuera. es decir$float = abs($float);
– Fritas
23 de mayo de 2019 a las 10:19
-
valor siempre será negativo. esperaba mencionarlo.
– ShivarajRH
3 de septiembre de 2019 a las 7:51
Gumbo
¿Qué tal algo trivial como:
-
invertir:
$num = -$num;
-
convirtiendo solo positivo en negativo:
if ($num > 0) $num = -$num;
-
convirtiendo solo lo negativo en positivo:
if ($num < 0) $num = -$num;
Fantasma silencioso
re la edición: “También necesito una forma de hacer lo contrario. Si el flotador es negativo, que sea positivo”
$number = -$number;
cambia el número a su opuesto.
dan tao
Creo que la respuesta de Gumbo está bien. Algunas personas prefieren esta elegante expresión que hace lo mismo:
$int = (($int > 0) ? -$int : $int);
EDITAR: Aparentemente, está buscando una función que también haga que los negativos sean positivos. Creo que estas respuestas son las más simples:
/* I am not proposing you actually use functions called
"makeNegative" and "makePositive"; I am just presenting
the most direct solution in the form of two clearly named
functions. */
function makeNegative($num) { return -abs($num); }
function makePositive($num) { return abs($num); }
-
porque envolver abdominales() cuando se usa tal cual? No.
– DrAlberT
17 de septiembre de 2009 a las 13:45
wallace vizerra
function positive_number($number)
{
if ($number < 0) {
$number *= -1;
}
return $number;
}
-
porque envolver abdominales() cuando se usa tal cual? No.
– DrAlberT
17 de septiembre de 2009 a las 13:45
Federico Krautwald
function invertSign($value)
{
return -$value;
}
-
Gracias por comentar por qué votaste negativo. Realmente util.
– Federico Krautwald
10 de diciembre de 2016 a las 4:13
-
Creo que esto se debe a que el OP declaró originalmente que solo quieren que los números positivos cambien de signo. Pero la pregunta es bastante confusa con el perno ambiguo: “También necesito una forma de hacer lo contrario”.
– Progrock
1 de junio de 2018 a las 14:01
Tenga en cuenta que el reverso no suena como el inverso del primero. Si cambias todos los signos de tu primer conjunto de números a negativos y luego los vuelves a colocar en positivos, no tendrás las cifras con las que comenzaste.
– Progrock
1 de junio de 2018 a las 13:58