[英]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.