How to force two digit after decimal

佐手、 提交于 2019-12-31 07:42:24

问题


I have the following TextView which displays $0.00 all the time unless any calculation is done after a button click and saved to this TextView.

        <TextView
            android:id="@+id/tvTotalAmount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="$0.00"
            android:textStyle="bold"
            android:paddingTop="10dp"
            android:textColor="#00A21E"
            android:textSize="25dp"
            android:paddingLeft="30dp"
            android:layout_below="@id/tvTotal" />
            <EditText
                android:id="@+id/etToll"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="numberDecimal" />
            <Button
                android:id="@+id/btnCalculate"
                android:background="@drawable/calcbutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Calculate"
                android:layout_gravity="right"
                android:textStyle="bold"
                android:textColor="#FFFFFF"
                android:shadowColor="#000000"
                android:shadowDx="1"
                android:shadowDy="1"
                android:shadowRadius="2"
                android:layout_alignParentRight="true" />

When I run the app, it displays $0.0 (this would work, except I am working with dollars and cents and I would like it to show two digit after decimal unless both digits are 00)

I am using SharedPreferences and here are my code within the app:

onCreate()

float totalTollAmount = 0;
    tollAmount = (EditText) mFrame2.findViewById(R.id.etToll); //where the amount is entered
    tollAmount.setFilters(new InputFilter[] {new DecimalFilter(6, 2)});
    tvTotalAmountLabel = (TextView) mFrame2.findViewById(R.id.tvTotalAmount); //holding total amount
    if (Float.toString(prefs.getFloat("dblTollAmount", 0)) != "0.0") {
        tollAmount.setText(Float.toString(prefs.getFloat("dblTollAmount", 0)));
    }
    tvTotalAmountLabel.setText("$" + Float.toString(prefs.getFloat("totalTollAmount", 0))); //retrieves the total toll amount and displays

btnCalc.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        strTollAmount = tollAmount.getText().toString();
        strInfName = nameOfInf.getText().toString();
        String k = "";
        if (strTollAmount.length() != 0 && strInfName.length() != 0) {
            float dblTollAmount = Float.parseFloat(strTollAmount);
            submitInfo(dblTollAmount);
        }
        Toast.makeText(getActivity(), k, Toast.LENGTH_SHORT).show();
    }
});

    private void submitInfo(float toll) {
        y = "TEST";
        if (y != null) {
            editor.putString("someId", y);
            totalTollAmount = round(toll + prefs.getFloat("totalTollAmount", 0));
            tvTotalAmountLabel.setText("$" + Float.toString(totalTollAmount));
            }
              else {
            editor.putString("someId", "");
        }
        editor.putString("previous-trip", y);
        editor.putFloat("totalTollAmount", round(totalTollAmount));
        //editor.commit(); removed on 8/3
        if (nameOfInf != null && nameOfInf.length() > 0) { // added on 8/3...
            //Clear out this value from Enter Data tab ONLY if Calculate happens
        }
        if (tollAmount != null && tollAmount.length() > 0) {
            //Clear out this value from the Enter Data tab ONLY if Calculate happens
        }
        editor.commit(); //added on 8/3
    }

private float round(float amount){
    return Float.parseFloat(new DecimalFormat("###.##").format(amount));
}

onDestroy method:

@Override
public void onDestroy(){
    super.onDestroy();
    Log.i("OnDestroy", "Logged");
    if(nameOfInf != null && nameOfInf.length() > 0) {
        editor.putString("strInfName", nameOfInf.getText().toString());
    }
    if(tollAmount != null && tollAmount.length() > 0) {
        editor.putFloat("dblTollAmount", Float.parseFloat(tollAmount.getText().toString()));
    }

    editor.commit();
}

What it's suppose to do: Each time I hit the calculate button the app should take what's on the EditText etToll and add to the value thats already on the TextView tvTotalAmount and it will continue to do so everytime.

Although the original value for the TextView is $0.00, it only shows $0.0. I would like to show two digit after the decimal on the EditText and TextView because I will be working with dollar and cent.

How can I fix the issue I am facing?

If the full code is needed, please let me know.


回答1:


use this in your code

DecimalFormat form = new DecimalFormat("0.00");
String FormattedText=form.format(your value);

set it to Edittext..it will work



来源:https://stackoverflow.com/questions/18128389/how-to-force-two-digit-after-decimal

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!