arr[index]=arr[index-1]+arr[index-2]; 報錯是因為你加起來的和是一個int類型,這個的精度比char的要告,雖然char可以看成是int但是如果int過大會出現亂碼.所以你可以去掉據代碼,如果你想體驗一下的話你可以參考下面的代碼:
/** 使用數組列印 a~z這26個字母 */
class ArrayTest3 {
public static void main(String[] args) {
// 1、創建數組
char[] arr = new char[26];
char c = 'a';
// 2、賦值
for (int index = 0; index <= arr.length - 1; index++) {
arr[index] = c;
c = (char) (c + 1);
}
// 3、取值
for (int index = 0; index <= arr.length - 1; index++) {
int result = (arr[index] + arr[index ]);
System.out.println(arr[index]);
System.out.println(result);//列印char相加後的數字結果值
}
}
}
B. java可能損失精度
i2=f2; //將f2的值賦給i2
改成i2=(int)f2;
f1=d2; //將d2的值賦給f1
改成f1=(float)d2;
C. 假設有int x=1;以下哪個代碼導致「可能損失精度,找到int需要char」這樣的編譯錯誤。(java題
ABD中,值其實在編譯期間就可以計算出來,並且計算結果是不會超過范圍的
唯獨C卻不會在編譯期間求值,需要在運行期間計算。
這樣的話,編譯器無法確知結果是否超出范圍,所以要給出一個錯誤。
你可能會問,x不是1嗎,但是x是變數,編譯器生成讓x=1,再讓m='a' + x這樣的指令,卻不會在編譯期間越俎代庖的把值計算出來,計算是留到運行期間的。
D. java中可能損失精度是什麼意思
publicstaticvoidmain(String[]args){
//double類型轉為float需要強轉
/**
*float的指數位有8位,而double的指數位有11位
*float的指數范圍為-127~+128,而double的指數范圍為-1023~+1024
*float:2^23=8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;
*double:2^52=4503599627370496,一共16位,同理,double的精度為15~16位。
*/
floatf=10.0f;
doubled=100.0d;
f=(float)d;//double轉float,但是這樣會造成損失精度
System.out.println("f="+f);
}
E. Java程序中的問題 short s1=1; s1+=1;為什麼編譯不出錯精度會損失嗎
short
s=31;
編譯沒問題是因為short的范圍是-32768~32767的,雖然31默認是int但是轉換為short不會超過范圍,所以不報錯。
你寫short
s=32768;
就會發現
這個也是報錯的。
而short
s1=31l;
「l」標明當前數字是long型,這樣就不能轉換為short型了
F. java中short s=31;short s1=31l;為什麼第一句編譯沒問題,第二句編譯通不過,說可能損失精度
short s=31; 編譯沒問題是因為short的范圍是-32768~32767的,雖然31默認是int但是轉換為short不會超過范圍,所以不報錯。 你寫short s=32768; 就會發現 這個也是報錯的。
而short s1=31l; 「l」標明當前數字是long型,這樣就不能轉換為short型了
G. Java精度損失
float 單精度浮點數在機內佔4個位元組,用32位二進制描述。
double 雙精度浮點數在機內佔8個位元組,用64位二進制描述。
你將一個范圍大的值 賦給 范圍小的值,自然會有精度損失
H. Java程序中的問題shorts1=1;s1+=1;為什麼編譯不出錯精度會損失嗎
1->s1=s1+1;2->s1+=1;
1例使用簡單賦值運算,2例使用復合賦值運算,而簡單賦值運算和復合賦值運算的最大差別就在於:復合賦值運算符會自動地將運算結果轉型為其左操作數的類型!這就是1例編譯不通過,2例編譯卻能通過的原因。
精度取決於他們相加的結果是否超過short所能表達的最大值,超過就丟精度反之不丟~~
I. C#中double和float 的轉變在計算機種怎麼實現的為何有精度損失何時出現精度損失怎樣避免
因為很多十進制小數,用二進制都無法表示,
比如0.1, 用二進製表示是無限循環小數。
十進制(0.1)=二進制(0.0001100110011....)
計算機是用二進製表示數的,存儲的位長有限,只能截掉,
所以誤差就產生了。
所以在一些要求四捨五入嚴格精度的場合,最好把浮點數轉換為
整數來計算,否則可能在某些特殊的情況下產生意外的計算錯誤。
J. java里強制類型轉換導致的精度損失問題.
double 和 float 的區別是double精度高,有效數字16位,float精度7位。你看下面的運行結果,double型的g輸出得結果,小數位7後的8也沒了,因為超出了double型的有效位數。同理float型的f輸出後7後面的數字超出了精度范圍,沒有任何意義了。