2015-09-25 5 views
0

Я делаюПолучение правильного десятичного числа в Java?

double x = distance/maxRange; 

И хочу й равный 1/3, например, когда расстояние = 10 и maxRange = 30 вместо 0.

Как я получил о том, что правильно отформатированных ?

Спасибо.

+2

Вы имеете в виду конкретно '1/3' в консоли, а не' 0,33333 ... ' –

+1

' 'и' maxRange' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – MadProgrammer

+0

Либо или будет работать 1/3 или 0,33333 Я должен принять это число и несколько его, чтобы что-то еще было возвращено. Я использую двойники. – Carson

ответ

2
double x = (double) 1/3; 
System.out.println(x); // result print 0.3333333333333333 

Вы должны преобразовать свой расчет в два раза, иначе вы получите 0.

1

Предполагая, что distance и maxRange являются Интс, деление всегда будет приводить к 0. То, что вы должны сделать это превратить один из них в double, чтобы заставить его делать деление с плавающей точкой:

double x = ((double) distance)/maxRange; 
0

двойной: тип двойной данные двойной точности 64-битная IEEE 754 с плавающей точкой ,

double z = (double) 1/3; 
System.out.println("Result Using Double = " + z); 
/* 
Result Using Double = 0.3333333333333333 
*/  

двойной имеет 53-битную точность увидеть только в https://en.wikipedia.org/wiki/Double-precision_floating-point_format. Так что, если вам нужно больше, чем 53-битную точность лучший вариант для этого используется BigDecimal Для примера:

BigDecimal distance = new BigDecimal("1"); 
BigDecimal maxRange = new BigDecimal("3"); 
BigDecimal x = distance.divide(maxRange, /*precision-scale*/ 100, RoundingMode.HALF_UP); 
System.out.println("Result Using BigDecimal=" + x); 
/* 
    Result Using BigDecimal=0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 
*/ 

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

+1

'double' не имеет 64-битной точности, всего 53 бит. И нужен только «1.0/3' или« 1/3.0 », который чище и короче, чем литье –

Смежные вопросы