2013-07-30 38 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;