我已经为我正在使用的双重声明了变量:
z= 345.876;
现在我想显示小数点前的位数。我试着做以下事情:
String string_form = new Double(z).toString().subString(0,string_form.indexOf('.'));
double t = Double.valueOf(string_form);
我收到错误说:'方法subString(int,int)未定义类型String'
然后快速修复显示将小案例更改为:substring。然而,错误然后更改为字符串'string_form',表示它未初始化。关于该怎么做的任何想法?
还有我如何修改它来查找数字后面的位数?我知道在
部分.indexOf('.')
我用数字替换小数点,但是我如何更改它以便显示数字之后有多少位数,而不是之前?谢谢。是的,我已经导入了小数格式文本。
答案 0 :(得分:1)
您在尝试创建string_form之前尝试使用它。
如果你打破
String string_form = new Double(z).toString().substring(0,string_form.indexOf('.'));
double t = Double.valueOf(string_form);
到
String string_temp = new Double(z).toString();
String string_form = string_temp.substring(0,string_temp.indexOf('.'));
double t = Double.valueOf(string_form);
然后它应该工作。
要获取小数点后面的数字,只需取从句点到数字末尾的数字。
String string_temp = new Double(z).toString();
String string_form = string_temp.substring(string_temp.indexOf('.'), string_temp.length());
double t = Double.valueOf(string_form);
正如其他人所指出的那样,除了转换为字符串并检查周期和重新转换之外,还有许多更好的方法。
答案 1 :(得分:1)
小数点前的小数位数由
给出(int)Math.log10(z)+1
不精确后的小数位数,取决于转换为十进制时使用的精度。浮点值不具有小数位,它们具有二进制位置,并且这两个位置是不可通约的。
答案 2 :(得分:0)
只需将double转换为字符串即可。找到索引。与indexOf
。得到字符串的长度。减去索引。从长度上你应该有计数。
答案 3 :(得分:0)
String string_form = Double(z).toString();
int index = string_form.indexOf('.');
double d = Double.parse(string_form.substring(0, index+1));
如果数字很小,你可以尝试
int i = (int) z;
或
long l = Math.round(z);
答案 4 :(得分:0)
您在表达式string_form
中使用string_form.indexOf('.')
,但它尚未初始化,因为它只在调用substring()
之后设置。您需要将toString()
的值存储在临时变量中,以便在调用substring()
时访问它。像这样的东西
String stringForm = new Double(z).toString();
stringForm = stringForm.substring(stringForm.indexOf('.'));
然而,还有其他更好的方法可以做到这一点。 <{1}}或甚至只是演员Math.floor(z)
都可以使用。
答案 5 :(得分:0)
你可以做下一件事:
Double z = 345.876;
int a = t.intValue();
int counter = 0;
while(a != 0) {
counter++;
a = a / 10; }
System.out.println(counter);
答案 6 :(得分:0)
可以这样做,例如:
Integer.parseInt(String.valueOf(possibleBirths).split(".")[0]);