我想要一个E表示法双精度变量去字符串,但是...?

时间:2018-10-02 22:19:58

标签: java string double println

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");

如果我在第12行中填写64,那么我想要的结果是9223372036854754775808,但结果显示此9.223372e + 18。 然后,我尝试将双精度'9.223372e + 18'转换为具有适当十进制数字的字符串,而不是在双精度末尾给出'808',但它具有'000'。我该怎么做才能使它代替808?

1 个答案:

答案 0 :(得分:1)

如果我对它的理解正确,那么可以大大简化您的代码,而不必担心由于功率消耗而使代码倍增。重复使用IEEE,它们没有完全存储在内存中。您可以使用以下内容:

long amount = 1;
int bits = -1;

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

除了它输出的值比您的期望值小。 (而且我认为由于数字范围很长,所以我们使用[-128,127]这样的范围作为二进制补码)我认为您写错了,因为我检查了,一定是那样。但是我不知道这是你想要的还是不需要的。