2010-03-10 12 views
5

Je réfléchis simplement à la possibilité de créer son propre type de données. Donc, si vous avez besoin de plus de précision, ce n'est pas pris en charge par l'un des types de base, vous pouvez simplement "créer" votre propre remplir vos requierements.Java: Faire son propre type de données? (par exemple long long double?)

Est-ce possible et comment?

+3

Je vous recommande de lire sur la programmation orientée objet. Vous pouvez utiliser des classes pour définir vos propres types de données. – Jonathan

+3

Une classe Java définie par l'utilisateur est également un type! Ajoutez simplement quelques membres de types longs, longs pour contenir des parties entières et fractionnaires d'un nombre. Ajouter des méthodes pour ajouter/soustraire et voilà! – Elister

+0

@Andreas Hornig n'hésitez pas à accepter une réponse qui répond à votre question. – Bozho

Répondre

16

Jetez un oeil à BigDecimal

Immuable, précision arbitraire signé des nombres décimaux

Et pour répondre à votre question - oui, vous pouvez les types de données de caisse, mais ils ne peuvent pas être primitifs types (comme int, double, etc.). Ils doivent être des classes, tout comme le cas avec BigDecimal (et BigInteger)

Et un autre conseil pour l'utilisation des classes Big* - tels qu'ils sont écrits, ils sont immuables. Cela signifie que l'appel add(..) ne change pas l'objet - il renvoie un nouvel objet qui reflète le changement. C'est à dire.

BigDecimal dec = BigDecimal.ZERO; 
dec.add(new BigDecimal(5)); // nothing happens 
dec = dec.add(new BigDecimal(5)); // this works 
8

Vous ne pouvez pas créer vos propres types de valeurs personnalisées en Java, si c'est ce que vous demandez. Vous pouvez, bien sûr, créer vos propres types référence - c'est ce que toutes les classes de Java sont, après tout.

Mais comme d'autres l'ont dit, BigDecimal (et BigInteger) devraient être vos points de départ pour les types numériques avec plus de précision.

1

Tout est toujours possible.

Cela ne signifie pas que quelqu'un ne l'a pas déjà fait auparavant, et beaucoup plus efficacement que vous ne le ferez jamais.

BigInteger et BigDecimal sont ce que vous cherchez.