查找java中小数点前的位数

时间:2016-02-24 19:52:28

标签: java decimalformat

我已经为我正在使用的双重声明了变量:

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('.') 

我用数字替换小数点,但是我如何更改它以便显示数字之后有多少位数,而不是之前?谢谢。是的,我已经导入了小数格式文本。

7 个答案:

答案 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]);