繁体   English   中英

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

[英]Finding number of digits before a decimal point in java

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

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 类型”

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

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

.indexOf('.') 

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

您在实际创建之前尝试使用 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.indexOf('.')使用string_form ,但它尚未初始化,因为它仅调用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM