Java-非零Int除以10在Float中等于0.0?

时间:2013-07-30 07:12:54

标签: java android floating-point

我有一个音量控制滑块来控制Android中音频文件播放的音量。

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。我在这做错了什么?

6 个答案:

答案 0 :(得分:4)

float volume=progress/10;

对两个int的操作会将结果显示为int。所以将结果转换为

float volume=(float)progress/10;

float volume=progress/10.0f;

请参阅casting hierarchy有显式和隐式演员

答案 1 :(得分:1)

使用float文字10.0f强制进行浮点运算。

float volume=progress/10.0f;

默认情况下,以下代码的 R.H.S 是整数airthmetic表达式:

float volume=progress/10;

由于progressint10int字面值。由于它执行整数除法,如果progress小于10,则表达式将评估为0,而volume将为{{1} }}

答案 2 :(得分:1)

在第

float volume=progress/10;

首先您正在执行整数除法progress/10并获得整数结果(如果progress< 10则为0 },你将获得float),然后你只是将结果投射到float volume=(float)progress/10;

你想要一个浮点除法:

progress

在那里,我们首先找到float并将其设为{{1}},然后进行除法并保存结果。

答案 3 :(得分:0)

float volume=progress/10.0;

按照上面的说法做出正确答案。 Int除以int将始终是一个整数,您只需将整数0赋值为float,结果将为0.0

答案 4 :(得分:0)

那是因为类型转换:

当您执行任何int/int时 - 输出在&gt; int然后被分配给浮动

所以如果你想在float中输出

float/intint/float - 输出位于 - &gt; float

牢记这一点:

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

答案 5 :(得分:0)

那是因为你正在进行整数除法,然后将结果转换为浮点数。试试这个:

float volume = progress / 10.0f;