簡體   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