2013-07-30 36 views
1

我有一個音量控制滑塊來控制Android中音頻文件的播放音量。Java-非零整數除以10等於0.0浮點?

vSlider=(SeekBar) findViewById(R.id.seekBar2); 
     vSlider.setMax(10); 
     if(mediaPlayer.isPlaying()){ 
      isPlaying=true; 
      try { 
       currentPosition = mediaPlayer 
         .getCurrentPosition(); 
       double seconds=currentPosition/1000; 
       int time= (int) Math.round(seconds); 
       String timeS=Integer.toString(time); 
       timer.setText(timeS+"s"); 
       Log.d("position",timeS); 
       fSlider.setProgress(currentPosition); 
      } catch (Exception e) { 

      } 
      vSlider.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){ 

       @Override 
       public void onProgressChanged(SeekBar seekBar, int progress, 
         boolean fromUser) { 
        float volume=progress/10; 
        Log.d("Progress", String.valueOf(progress)); 
        Log.d("Volume",String.valueOf(volume)); 
        mediaPlayer.setVolume(volume, volume); 

       } 
       @Override 
       public void onStartTrackingTouch(SeekBar seekBar) { } 
       @Override 
       public void onStopTrackingTouch(SeekBar seekBar) { }       
      }); 

正在正確檢測滑塊進度的int值,但浮動量總是變爲0.0。我在這裏做錯了什麼?

+0

'進度/ 10'是一個整數除法。改爲嘗試'progress/10f'。如果'currentPosition'是一個int,你可能會遇到另一個類似的問題。 – assylias

+0

progress/10是一個整數除法,如果進度小於10,則返回0。後綴將轉換爲float 0.0。你需要執行一個浮點除法:volume =((float)progress)/ 10.0; – Stefan

回答

4
float volume=progress/10; 

兩個int操作給出了導致爲int。所以把結果作爲

float volume=(float)progress/10; 

float volume=progress/10.0f; 

casting hierarchy有顯性和隱性投

+0

(float)不是必需的。但否則是正確的。解決這個問題,我會+1。 – Bathsheba

+0

@aquestion這是行不通的,'10.0'是'double'文字。 – NINCOMPOOP

+0

@新白癡:你確定嗎? 10是一個int文字。 10.0是一個雙重字面意思,它會導致進度被提升爲雙倍。我同意雖然10.0f是更好的。 – Bathsheba

1

使用float文字10.0f強制浮點運算。

float volume=progress/10.0f; 

默認情況下,R.H.S下面的代碼的是整數airthmetic表達式:

float volume=progress/10; 

由於progressint10int字面。由於它執行整數除法,如果progress小於10,則表達式將評估爲0並且volume將爲0.0

1

在行

float volume=progress/10; 

第一你正在做的整數progress/10並得到一個整數(所以如果progress是什麼< 10,你會得到0),然後你只是將該結果投射到float

你想要一個浮點除法來代替:

float volume=(float)progress/10; 

這裏,我們首先atking progress並使其成爲一個float然後做除法和保存結果。

0
float volume=progress/10.0; 

按照上述方法得到正確的答案。 int除以int將始終是一個整數,您只是將整數0賦值爲float,結果將爲0。0

0

那是因爲類型轉換:

當你做任何int/int --output是在 - >int然後將其分配給浮

所以,如果你想在浮置輸出

float/intint/float --output是 - >float

牢記這一點:

float value = progress/10.0f //as by default 10.0 is double in java 
0

這是因爲您正在進行整數除法,然後將結果轉換爲浮點數。試試這個:

float volume = progress/10.0f;