2012-05-16 26 views
10

Necesito comparar dos valores. Un valor es price que representa el precio actual de algo así que decimal porque en realidad puede comprar o vender algo por este precio.para comparar el doble y el decimal ¿Debería convertir doble a decimal o decimal a doble?

Otro valor es estimatedPrice que es el resultado de cálculos matemáticos y así double porque es sólo estimation y no se puede hacer realidad cualquier "operaciones" por esta esitmatedPrice

ahora quiero comprar si price < estimatedPrice.

Entonces, ¿debo aplicar el precio al doble o al precio estimado a decimal?

Entiendo que después del casting obtendré números "levemente otros", pero parece que no tengo otras opciones.

+0

@BlueChippy no puede usar flotador para los datos de precios si los artículos son caros. Por ejemplo, float no puede representar '123456.78'. – phoog

+0

Decimal ocupa más memoria y tiene números más significativos con un rango más pequeño y, por lo tanto, puede ser "más preciso" (dependiendo de su punto de vista de "precisión") en comparación con los puntos flotantes (flotante/doble). Podría muy felizmente usar el doble para ambos valores, o decimal, o flotar si lo desea, especialmente si el Precio siempre va a tener dos decimales. No se puede convertir explícitamente de punto flotante a decimal (ya que son cosas completamente diferentes), por lo que podría ser mejor en este caso elegir uno para todos los tipos. ¡Dejará que otros le recomienden cuál! (Yo iría decimal, personalmente) – BlueChippy

+0

@phoog Verdadero, depende del escenario. Mi pref personal es decimal (preferido) o doble ... pero si es posible use ese tipo en general. – BlueChippy

Respuesta

11

Depende de los datos. El decimal tiene una mayor precisión; el doble tiene mayor alcance Si el doble puede estar fuera del rango decimal, debe convertir el decimal al doble (o bien, podría escribir un método que devuelva un resultado sin conversión, si el valor doble está fuera del rango decimal; vea el ejemplo a continuación).

En este caso, parece poco probable que el doble valor esté fuera del rango decimal, por lo que (especialmente dado que está trabajando con datos de precios) debe convertir el doble en decimal.

Ejemplo (podría utilizar algo de lógica para manejar valores NaN):

private static int Compare(double d, decimal m) 
{ 
    const double decimalMin = (double)decimal.MinValue; 
    const double decimalMax = (double)decimal.MaxValue; 
    if (d < decimalMin) return -1; 
    if (d > decimalMax) return 1; 
    return ((decimal)d).CompareTo(m); 
} 
0

Nunca antes he trabajado con precios en software, pero por lo que he escuchado, muchos tratan con enteros. Por ejemplo, por $ 1.23, guárdelo como el número entero 123. La conversión a un decimal se realiza al final cuando se envían los resultados al usuario.

De forma similar, para su precio estimado, ¿puede tratar con números que son (digamos) 100 veces más grandes?

+0

esto podría ser una buena optimización, sin embargo, en este momento debería convertir el doble a decimal o decimal a doble. También creo que probablemente el uso interno 'decimal'' int' por lo que sería más fácil usar 'decimal' como precio. – javapowered

1

lo recomiendo a convertir a decimal . porque parece que quieres manipular los valores monetarios. pero puedo dar esta breve respuesta: para aplicaciones precisas (manipulando el valor del dinero especialmente para aplicaciones financieras) use decimal. y si prefiere menos recursos y más velocidad, use el doble.

Cuestiones relacionadas