在 java 中查找小数点前的位数



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

z= 345.876;

现在我想显示小数点之前的位数。我尝试执行以下操作:

String string_form = new Double(z).toString().subString(0,string_form.indexOf('.'));
double t = Double.valueOf(string_form);

我收到一个错误说:"方法子字符串(int,int)未为字符串类型定义"

然后快速修复显示将其更改为小写 s:子字符串。但是,错误随后更改为字符串"string_form",表示它未初始化。关于该怎么做的任何想法?

还有我将如何修改它以找到数字后面的位数?我知道在部分

.indexOf('.') 

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

您正在尝试在实际创建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);

正如其他人指出的那样,有许多比转换为字符串并检查句点和重新转换更好的方法。

数点前的小数位数由下式给出

(int)Math.log10(z)+1

它后面的小数位数不精确,取决于您在转换为十进制时使用的精度。浮点值没有小数位,它们有二进制位,两者不可比拟。

只需将双精度转换为字符串即可。 查找 的索引。 与 indexOf . 获取字符串的长度。 减去 的索引。 从长度中,你应该有计数。

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

您在表达式中使用了string_form string_form.indexOf('.') ,但它尚未初始化,因为它仅在调用 substring() 之后设置。您需要将 toString() 的值存储在临时变量中,以便您可以在调用 substring() 时访问它。像这样的东西

String stringForm = new Double(z).toString();
stringForm = stringForm.substring(stringForm.indexOf('.'));

但是,还有其他更好的方法可以做到这一点。 Math.floor(z)甚至只是一个演员(long)z就可以了。

可以这样做,用于检查:

Integer.parseInt(String.valueOf(possibleBirths).split(".")[0]);

你可以做下一件事:

Double z = 345.876;
int a = t.intValue();
int counter = 0;
while(a != 0) {
  counter++;
  a = a / 10;  }
System.out.println(counter);

最新更新