Tengo double
valor d
y me gustaría una forma de empujarlo ligeramente más grande (o más pequeño) para obtener un nuevo valor que sea lo más parecido posible al original pero estrictamente mayor que (o menor que) el original .¿Cómo alterar un flotante por su incremento más pequeño en Java?
No tiene que estar cerca del último bit; es más importante que cualquier cambio que realice garantice la producción de un valor diferente y no redondeado al original.
(This question has been asked and answered for C, C++)
La razón que necesito esto, es que estoy mapeo de Double a (algo), y puede tener múltiples elementos con el 'valor' doble parada, pero todos ellos necesitan para ir individualmente en el mapa.
Mi código actual (que hace el trabajo) es el siguiente:
private void putUniqueScoreIntoMap(TreeMap map, Double score,
A entry) {
int exponent = 15;
while (map.containsKey(score)) {
Double newScore = score;
while (newScore.equals(score) && exponent != 0) {
newScore = score + (1.0d/(10 * exponent));
exponent--;
}
if (exponent == 0) {
throw new IllegalArgumentException("Failed to find unique new double value");
}
score = newScore;
}
map.put(score, entry);
}
¿Por qué usa un tipo doble para su necesidad? Un "ID de modificación" largo sería mucho más fácil de implementar. –
Esto es bastante hacky. ¿Por qué no usar un mapa de listas? –
Lo que dijo @Joeri. Si necesita valores múltiples para una clave en un mapa, simplemente almacene una lista de valores para cada clave. –