Qual é a melhor maneira de converter um dobro para um longo sem vazamento?
Por exemplo:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
java
type-conversion
Trenó
fonte
fonte
myLong == (long)(myDouble + 1)
ondemyLong
iguaismyDouble
irá avaliar atrue
Double.longValue();
) ainda é útil se você tiver valores duplos de coisas como uma lista de matrizes como essa,ArrayList<Double>
pois você receberá um erro que não pode ser convertido. Só estou dizendo isso para quem veio aqui e teve um problema um pouco diferente.Respostas:
Supondo que você esteja feliz com o truncamento em direção a zero, basta transmitir:
Isso será mais rápido do que passar pelas classes de wrapper - e, mais importante, é mais legível. Agora, se você precisar de arredondamentos diferentes de "sempre para zero", precisará de um código um pouco mais complicado.
fonte
... E aqui está o caminho arredondado que não trunca. Apressou-se a procurá-lo no Java API Manual:
fonte
A abordagem preferida deve ser:
Na documentação Double (Java Platform SE 7) :
fonte
(new Double(d)).longValue()
internamente apenas faz um cast, portanto não há razão para criar um objeto Double.fonte
A biblioteca Guava Math possui um método especialmente projetado para converter um duplo em um longo:
Você pode usar
java.math.RoundingMode
para especificar o comportamento de arredondamento.fonte
Se você tem uma forte suspeita de que o DUPLO é realmente LONGO, e deseja
1) identifique seu valor EXATO como LONGO
2) lançar um erro quando não for LONGO
você pode tentar algo como isto:
Long é um subconjunto de Double; portanto, você pode obter resultados estranhos se tentar converter um Double fora do intervalo de Long:
fonte
Long is a subset of Double
não é preciso. O número de dígitos significativos para Long é maior que Double, portanto, algumas informações mantidas por Long podem ser perdidas quando convertidas em Double. Exemplo = tio.run/…Deseja ter uma conversão binária como
fonte
Simplesmente pelo seguinte:
fonte
Simplificando, a conversão é mais eficiente do que criar um objeto Duplo.
fonte