Я хочу, чтобы двойная переменная нотации E перешла в строку, но ...? - PullRequest
0 голосов
/ 03 октября 2018
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

double amount = 0;
int bits = -1;

////////////////////////////
//Enter the amount of bits//
////////////////////////////
        bits += 64;
////////////////////////////


for(int i = 0; i <bits;i++)
{
  amount += pow(2,i);


}
DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
df.setMaximumFractionDigits(340);
String amount1 = String.format(df.format(amount));
println("number: ", amount1);
int namelength = amount1.length();
println(namelength, " digits");

Если я введу 64 в строке 12, то я хочу, чтобы результат был 9223372036854775808, но это выдает 9.223372e + 18.Затем я пытаюсь преобразовать этот двойной '9.223372e + 18' в строку с соответствующими десятичными числами, но вместо того, чтобы дать '808' в конце двойного, но у него есть '000'.Что мне нужно сделать, чтобы он дал мне 808 вместо?

1 Ответ

0 голосов
/ 03 октября 2018

Если я правильно понимаю, ваш код может быть значительно упрощен, и нет необходимости удваивать из-за пух.дважды используйте IEEE, и они не сохраняются точно в памяти.Вы можете использовать что-то вроде этого:

long amount = 1;
int bits = -1;

bits += 64;
amount = (amount << bits) - 1;
System.out.println("number: " + amount);

, за исключением того, что оно выдает на одно значение меньше, чем вы ожидаете.(и я думаю, что из-за длинного диапазона чисел у нас есть такой диапазон [-128, 127] для дополнения до двух). Я думаю, что вы пишете неправильно, потому что я проверяю, и это должно быть так.Однако я не знаю, хотите ли вы этого или нет.

...