在 java 中查找小数点前的位数
Finding number of digits before a decimal point in java
我已经声明了我正在使用的双精度变量:
z= 345.876;
现在我想显示小数点前的位数。我尝试执行以下操作:
String string_form = new Double(z).toString().subString(0,string_form.indexOf('.'));
double t = Double.valueOf(string_form);
我收到一条错误消息:'The method subString(int, int) is undefined for the type String'
然后快速修复显示将其小写更改为:子字符串。然而,错误然后更改为字符串 'string_form' ,表示它未初始化。关于做什么的任何想法?
还有我如何修改它以查找数字后面的位数?我知道
.indexOf('.')
我想用数字替换小数点,但我该如何更改它才能显示数字后面有多少位,而不是前面?谢谢。是的,我已经导入了 decimalformat 文本语言。
您在实际创建之前尝试使用 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);
正如其他人所指出的,有许多比转换为字符串并检查句点并重新转换更好的方法。
只需将双精度型转换为字符串即可。找到 的索引。 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
,但它尚未初始化,因为它仅在 调用 [=13] 之后设置 =].您需要将 toString()
的值存储在一个临时变量中,以便您可以在对 substring()
的调用中访问它。像这样
String stringForm = new Double(z).toString();
stringForm = stringForm.substring(stringForm.indexOf('.'));
但是,还有其他更好的方法可以做到这一点。 Math.floor(z)
甚至只是一个转换 (long)z
都可以。
你可以做下一件事:
Double z = 345.876;
int a = t.intValue();
int counter = 0;
while(a != 0) {
counter++;
a = a / 10; }
System.out.println(counter);
小数点前小数位数由
给出
(int)Math.log10(z)+1
小数点后的位数不精确,取决于转换为小数时使用的精度。浮点数没有小数位,有二进制位,两者不可通约
可以这样做,例如:
Integer.parseInt(String.valueOf(possibleBirths).split(".")[0]);
我已经声明了我正在使用的双精度变量:
z= 345.876;
现在我想显示小数点前的位数。我尝试执行以下操作:
String string_form = new Double(z).toString().subString(0,string_form.indexOf('.'));
double t = Double.valueOf(string_form);
我收到一条错误消息:'The method subString(int, int) is undefined for the type String'
然后快速修复显示将其小写更改为:子字符串。然而,错误然后更改为字符串 'string_form' ,表示它未初始化。关于做什么的任何想法?
还有我如何修改它以查找数字后面的位数?我知道
.indexOf('.')
我想用数字替换小数点,但我该如何更改它才能显示数字后面有多少位,而不是前面?谢谢。是的,我已经导入了 decimalformat 文本语言。
您在实际创建之前尝试使用 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);
正如其他人所指出的,有许多比转换为字符串并检查句点并重新转换更好的方法。
只需将双精度型转换为字符串即可。找到 的索引。 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
,但它尚未初始化,因为它仅在 调用 [=13] 之后设置 =].您需要将 toString()
的值存储在一个临时变量中,以便您可以在对 substring()
的调用中访问它。像这样
String stringForm = new Double(z).toString();
stringForm = stringForm.substring(stringForm.indexOf('.'));
但是,还有其他更好的方法可以做到这一点。 Math.floor(z)
甚至只是一个转换 (long)z
都可以。
你可以做下一件事:
Double z = 345.876;
int a = t.intValue();
int counter = 0;
while(a != 0) {
counter++;
a = a / 10; }
System.out.println(counter);
小数点前小数位数由
给出(int)Math.log10(z)+1
小数点后的位数不精确,取决于转换为小数时使用的精度。浮点数没有小数位,有二进制位,两者不可通约
可以这样做,例如:
Integer.parseInt(String.valueOf(possibleBirths).split(".")[0]);