我已经为我正在使用的双精度声明了变量:
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);