>source

계산기 앱을 만들고 있습니다.

workingsTV 계산이 표시되는 곳입니다.

resultsTV 계산 결과를 보여주는 곳입니다.

workings rhino의 라이브러리를 사용하여 수학을하고 있습니다.

두 자리의 세 자리마다 쉼표를 추가하고 싶습니다. workingsTVresultsTV .

나는 이것을 위해 이것을 사용하려고 노력했습니다. resultsTV .

DecimalFormat df = new DecimalFormat("###,###.####", new DecimalFormatSymbols(Locale.US));
                result = Double.parseDouble(df.format(result));

하지만 표시 할 때 앱이 닫혔습니다. result

오류 메시지입니다.
원인 : java.lang.reflect.InvocationTargetException
원인 : java.lang.NumberFormatException : 입력 문자열 : "1,235"

다음은 코드의 상단 부분입니다.

public class MainActivity extends AppCompatActivity {
    TextView workingsTV;
    TextView resultsTV;
    String workings = "";
    String CLEAR_INT_TEXT;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initTextView();
    }
    private void initTextView()
    {
        workingsTV = (TextView)findViewById(R.id.workingsTextView);
        resultsTV = (TextView)findViewById(R.id.resultTextView);
    }
    private void setWorkings(String givenValue)
    {
        workings = workings + givenValue;
        workingsTV.setText(workings);
    }
    public void equalsOnClick(View view)
    {
        Double result = null;
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
        try {
            result = (Double) engine.eval(workings);
            if (result != null)
            {
                DecimalFormat df = new DecimalFormat("###,###.####", new DecimalFormatSymbols(Locale.US));
                result = Double.parseDouble(df.format(result));
                int intVal = (int) result.doubleValue();
                if (result == intVal)
                {//Check if it's value is equal to its integer part
                    resultsTV.setText(String.valueOf(intVal));
                }
                else
                {
                    resultsTV.setText(String.valueOf(result));
                }
            }
        }


  • 답변 # 1

    이 함수를 사용하여 double을 형식이 지정된 문자열로 변환하고 있습니다.

    public String formatDouble(double value, int digits) {
        DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
        decimalFormatSymbols.setGroupingSeparator(',');
        decimalFormatSymbols.setDecimalSeparator('.');
        DecimalFormat decimalFormat = new DecimalFormat("###,##0.00", decimalFormatSymbols);
        decimalFormat.setMinimumFractionDigits(digits);
        decimalFormat.setMaximumFractionDigits(digits);
        return decimalFormat.format(value);
    }
    
    

    코드에서 이미 여기에 결과 값이 있습니다. result = (Double) engine.eval(workings); . 두 번째로받는 이유는 무엇입니까? 또한 이중 (쉼표)에 대해 잘못된 문자를 포함 할 수있는 형식화 된 문자열을 사용합니다.

    그 두 줄을 제거하십시오.

               DecimalFormat df = new DecimalFormat("###,###.####", new DecimalFormatSymbols(Locale.US));
                result = Double.parseDouble(df.format(result));
    
    

    내 함수와 같이 TextView로 설정할 때 결과 값의 형식을 지정합니다.

    resultsTV.setText(formatDouble(result, 4));
    
    

    equalsOnClick () 메소드 끝에서 다음을 설정해야합니다. result 또는 intVal ~로 workings 변수를 사용하여 다음 작업을 준비합니다.

    workings = String.valueOf(result);
    
    

  • 답변 # 2

    이 시도:

    import java.text.NumberFormat;
    import java.util.Locale;
    Locale locale = new Locale("en", "US");
    NumberFormat fmt = NumberFormat.getCurrencyInstance();
    System.out.println(fmt.format(1235.00));
    
    

관련 자료

  • 이전 postgresql - Python을 사용하여 존재하지 않는 경우 postgres 사용자/역할을 만드는 방법
  • 다음 initialization - 시작시 Janusgraph Docker로 데이터를 가져 오는 방법