我想要一个 E 符号双变量去字符串,但是......?
I want an E notation double variable to go to string, but...?
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,那么我想要的结果是 9223372036854775808,但结果是 9.223372e+18。
然后我尝试将双精度“9.223372e+18”转换为具有适当十进制数字的字符串,而不是在双精度的末尾给出“808”,但它有“000”。我需要做什么才能让它给我 808?
如果我没理解错的话,你的代码可以简化很多,不需要因为pow而加倍。双重使用 IEEE,它们并没有准确地存储在内存中。你可以使用这样的东西:
long amount = 1;
int bits = -1;
bits += 64;
amount = (amount << bits) - 1;
System.out.println("number: " + amount);
除了它输出的值比你期望的少一个。 (而且我认为由于数字范围很长,我们有这样的范围 [-128, 127] 用于补码)我认为你写错了,因为我检查过,它一定是那个。不过不知道是不是你想要的
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,那么我想要的结果是 9223372036854775808,但结果是 9.223372e+18。 然后我尝试将双精度“9.223372e+18”转换为具有适当十进制数字的字符串,而不是在双精度的末尾给出“808”,但它有“000”。我需要做什么才能让它给我 808?
如果我没理解错的话,你的代码可以简化很多,不需要因为pow而加倍。双重使用 IEEE,它们并没有准确地存储在内存中。你可以使用这样的东西:
long amount = 1;
int bits = -1;
bits += 64;
amount = (amount << bits) - 1;
System.out.println("number: " + amount);
除了它输出的值比你期望的少一个。 (而且我认为由于数字范围很长,我们有这样的范围 [-128, 127] 用于补码)我认为你写错了,因为我检查过,它一定是那个。不过不知道是不是你想要的