Boolean Multiplier;
double Number;
double Value;
string Text;
Text = (Value * (1 + (Convert.ToInt32(Multiplier) / 2)).ToString(".0##");

Este es el código actual que he resumido hasta el comportamiento general con el comportamiento previsto de Valor multiplicado por 1,5 si el multiplicador es verdadero y el valor permanece igual si el multiplicador es falso.

Sin embargo, este alguien no funciona aunque funcionó sin la división y creo que tiene que ver con que los flotadores no se muestran correctamente. Así que quería preguntar si puedo usar algo como enumeraciones donde tengo dos valores y uno de ellos se elige dependiendo de si el booleano es verdadero o falso. Se agradecen otras formas, así como consejos sobre el formato de números decimales en el lateral, ya que soy bastante nuevo. Si esto ya está documentado en algún lugar, lo siento, pero no lo encontré :(

-1
Firro 14 dic. 2016 a las 20:23

2 respuestas

La mejor respuesta

No debería (en mi humilde opinión) utilizar la conversión de booleano a int (o cualquier otro tipo). Se basa en el conocimiento tácito de las reglas de conversión y / o en la búsqueda de documentación.

Tu requerimiento es:

El texto es el valor multiplicado por 1,5 si el multiplicador es verdadero y el valor permanece igual si el multiplicador es falso, convertido en una cadena.

Entonces, ¿por qué no codificarlo de esta manera, usando un operador ternario estándar:

Text = (Multiplier ? Value * 1.5 : Value).ToString(".0##");

O alguna variante si no le gusta la referencia a Value duplicada.

Está claro cuáles son los dos resultados posibles, y no depende de las reglas que convierten un tipo no numérico en un tipo numérico, y no cae presa de la trampa de la división de enteros que hace su código actual.

1
D Stanley 14 dic. 2016 a las 17:38

Podría usar una declaración if:

double val = Value;
if( Multiplier )
{
   val = val * 1.5;
}
Text = val.ToString( ".0##" );
1
clcto 14 dic. 2016 a las 17:26