浮点数之间的减法

Substraction between Float

请大家帮帮我!我要疯了 !下面是我的代码的简要总结,应该用来做一个简单的减法。我是否应该只读取 SCONTRINO 的数量,如果您输入 CONTANTI,字段 VINCITE 将具有 setText SCONTRINO-CONTANTI,与 VINCITE 相同,将 CONTANTI.setText SCONTRINO-VINCITE。 但是尽管一切似乎都写得很好,当我插入一个字段时,我通过两个更新方法出现 WhosebugError。

public class AssegnaScontoActivity extends Activity {
    TextView contanti;
    TextView vincite;
    TextView scontrino;
    Float contantiFloat;
    Float vinciteFloat;
    Float scontrinoFloat;


  public void onCreate(Bundle savedInstanceState) {
    //INIZIALIZZAZIONE ACTIVITTY
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.assegna_sconto_activity_landscape);
    //--------------------------  

    contantiFloat = Float.parseFloat(contanti.getText().toString());
    vinciteFloat = Float.parseFloat(vincite.getText().toString());
    scontrinoFloat = Float.parseFloat(1000);
    contanti = (TextView) findViewById(R.id.contanti);
    vincite = (TextView) findViewById(R.id.importo_vincite);
    scontrino = (TextView) findViewById(R.id.importo_scontrino);        


  contanti.addTextChangedListener(new TextChangedListener()
    {
        @Override
        public void numberEntered(Float number)
        {
            contantiFloat = number;
            updateVincite();

        }
    });
    vincite.addTextChangedListener(new TextChangedListener()
    {

        @Override
        public void numberEntered(Float number)
        {
            vinciteFloat = number;
            updateContanti();
        }
    });
    }

private void updateVincite()
{
    Float total = scontrinoFloat - contantiFloat; // This is where you apply your function
    vincite.setText(""+total); // need to do that otherwise int will
    // be treated as res id.
}

private void updateContanti()
{

    Float total = scontrinoFloat - vinciteFloat; // This is where you apply your function
    contanti.setText(""+total); // need to do that otherwise int will
    // be treated as res id.
}

private abstract class TextChangedListener implements TextWatcher
{

    public abstract void numberEntered(Float number);

    @Override
    public void afterTextChanged(Editable s)
    {
        String text = s.toString();
        try
        {
            Float parsedFloat = Float.parseFloat(text);
            numberEntered(parsedFloat);
        } catch (NumberFormatException e)
        {
            Log.w(getPackageName(), "Non si puo' parsare '" + text + "' col numero", e);
        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after)
    {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
    }
}

您的代码将进入无限循环,因为您在调用 afterTextChanged() 时更改文本,这会导致再次调用 afterTextChanged() 等等,直到最终溢出您的调用堆栈。

如果文本与当前文本不同,您可以通过仅在 updateVincite() 和 updateContanti() 中设置文本来停止此操作。

例如:

private void updateVincite()
{
    Float total = scontrinoFloat - contantiFloat; // This is where you apply your function
    String text = ""+total;
    if(!vincite.getText().toString().contentEquals(text))
        vincite.setText(text); // need to do that otherwise int will
    // be treated as res id.
}

并对 updateContanti() 执行相同操作

首先定义 contantivincite

更改代码如下。

contanti = (TextView) findViewById(R.id.contanti);
vincite = (TextView) findViewById(R.id.importo_vincite);
scontrino = (TextView) findViewById(R.id.importo_scontrino);     
contantiFloat = Float.parseFloat(contanti.getText().toString());
vinciteFloat = Float.parseFloat(vincite.getText().toString());
scontrinoFloat = Float.parseFloat(1000);