2009-05-21 13 views
5

¿Puede sugerir la mejor manera de definir el tipo de dinero en F #?¿Cómo se define el tipo de dinero en F #

+1

A juzgar por las respuestas, su pregunta necesita aclaración. ¿Estás hablando de unidades de medida (por ejemplo, para no confundir dos monedas diferentes) o de decimales y problemas de redondeo? – Benjol

Respuesta

11

¡Siempre, siempre, use System.Decimal para almacenar datos financieros! (A menos que no se preocupan por la inexactitud y errores de redondeo!) http://msdn.microsoft.com/en-us/library/364x0z75(VS.71).aspx

+0

Sé que es la referencia C# pero la información también es válida para f # ... – Fraser

+0

Así que las medidas F # no proporcionan ninguna beneficios adicionales para aplicaciones financieras? –

+1

Sí, pero aún puede definir un decimal (o cualquier medida de moneda que cree) – H27studio

0

usa un largo y almacena centavos (o décimas de un centavo) en él.

Puede usar una clase como Decimal, pero eso generalmente termina en being quite slow.

+0

¿No debería la corrección ser más importante que la velocidad en este caso? –

+0

cómo está utilizando un tipo de enteros para almacenar la unidad más pequeña no precisa. No es como usar un tipo doble. – gbjbaanb

+1

Peligroso. Además de la alta probabilidad de error, más adelante puede tener problemas cuando alguien dice que la tasa de impuestos es de $ 0.001 por unidad. –

4

tipo de dinero = int <dollars>?

Ni siquiera lo he intentado ver ... ¿puede definir unidades arbitrarias, o solo funciona con las definidas explícitamente?

Es obvio que probablemente querrá

tipo de dinero = int <thousandths_of_currency> (o decenas de monedas de un centavo, o lo que sea).

Para ser más precisos.

Editado:

decimales toman tipos por lo que puede definir el dinero como:

[<Measure>] 

type = pounds 

type money = decimal<pounds> 

que pueda garantizar monedas no están cruz convertidos por accidente, por ejemplo:

si

balance = decimal<pounds> 

y

payment = decimal<dollars> 

newbalance = balance + payment 

no se compilará, y usted tiene que convertir el pago a decimal<pounds>

+0

No entiendo lo que sugiere :(F # permite definir unidades arbitrarias. –

+0

aww ... parece que las unidades solo se aplican a carrozas ! curses. – Massif

+0

F # le permite definir unidades de medida para un tipo de número. Por lo tanto, puede definir un tipo length = float y las unidades se conservarán mediante cálculos. Ver: http://blogs.msdn.com/andrewkennedy /archive/tags/Units+of+Measure/default.aspx – Massif

2

Luca Bolognese suggests uno define su propio tipo de dinero con sede fuera de flotación:

[<Measure>] type money 
let money (f:float) = f * 1.<money> 
+0

Seguí el enlace, y eso es un ejemplo, no una sugerencia. Depende de la aplicación, pero creo que para la gran mayoría de las aplicaciones, la respuesta aceptada es el camino a seguir. –

1

F # ahora se ha construido en apoyo a Medidas y unidades. De acuerdo con el ingeniero principal de esta función, Kennedy está dirigido a financieras aplicaciones, entre otras soluciones.

Así lo vería antes de definir mi propio tipo de dinero en F #.

Werner

Cuestiones relacionadas