J'ai deux valeurs Integer
et je dois créer une valeur Double
en combinant ces deux valeurs de la manière suivante:
A.CB
où:
A
- première valeur entière
B
- deuxième valeur entière
C
- zéro correspondant à la longueur totale
Fondamentalement, CB
doit toujours comporter 9 chiffres au total, c'est-à-dire lorsque B = 1
j'ai besoin que C
soit < code> 8 zéro, si B = 100
j'ai besoin de C
sera 6
zéro.
Pour obtenir ces résultats:
15.000000001
et
17.000000100
Quelle est la meilleure façon d'aborder cette logique dans le code? Je veux dire que je peux écrire une méthode personnalisée pour créer cette logique, mais Java a-t-il déjà quelque chose pour ce cas à simplement l'utiliser, sans créer de méthodes personnalisées? Mieux vaut si c'est possible sans utiliser les fonctions de format de chaîne (pour ne pas convertir les valeurs Integer en String).
3 Réponses :
Divide b / 1000000000.0
:
12.000000123
Imprime:
int a = 12; int b = 123; double x = a + b / 1000000000.0; System.out.println(x);
Sauf b est supérieure à 9 chiffres, vous obtiendrez ce que vous voulez.
Obtenir 17.000000100
comme résultat n'est pas possible avec votre solution. Il renverra 17.0000001
pour a = 17
et b = 100
.
@SamuelPhilipp c'est un problème de formatage et comme le veut l'OP: * si c'est possible sans utiliser les fonctions de format de chaîne *
Oui, mais sans ce n'est pas possible je pense.
Bien sûr, ce n'est pas possible. Le problème peut être résolu jusqu'au point du calcul de la valeur double. La représentation de la valeur sera faite par l'OP.
Quelque chose comme ça?
123.000000450
L'imprimera
int A = 123, B = 450; System.out.println(String.format("%.09f", A + 1e-9 * B));
P.S. String.format
est requis en raison de votre exigence de fin de zéros après la virgule. Ces zéros n'existent pas réellement, vous avez donc besoin d'un moyen de remplir votre sortie, et String.format
est un moyen pratique de le faire. Si vous voulez juste une valeur double
, vous n'avez pas besoin de String.format
.
Sauf que OP dit: "Mieux vaut si c'est possible sans utiliser les fonctions de format de chaîne"
17.000000100
et 17.0000001
sont des valeurs à virgule flottante identiques. C'est seulement un "problème" si OP veut afficher un nombre spécifique de chiffres, ce qui implique une forme de conversion en String
.
int a = 12; int b = 123; // How many digits in b? int blen = (int)Math.log10(b); // Make a string of zeros String padding = "00000000".substring(blen); System.out.println(a + "." + padding + b); This will fail apart if b is very large, as blen will be larger than the padding, and so substring will fail. Also, negative b will mess things up.
Si vous ne souhaitez pas convertir en String, vous aurez un problème chaque fois que B se termine par un ou plusieurs zéros. Vous ne pouvez pas définir la précision d'un Double sur un nombre spécifié de chiffres décimaux, car les valeurs à virgule flottante n'ont pas de chiffres décimaux (elles ont des chiffres binaires). Donc, si vous voulez arrondir / tronquer à un nombre spécifique de chiffres, vous devrez convertir en quelque chose avec une base décmiale, via
BigDecimal
ouDecimalFormat
. (Ou à une chaîne.)