简体   繁体   English

存储一个字符串arraylist到一个double arraylist?

[英]storing a string arraylist into a double arraylist?

I have a string arraylist with numbers like ["51,073","51,074","51,073"] now i want to convert this into a Double ArrayList and calculate the sum of the numbers in the array list. 我有一个数字为[“ 51,073”,“ 51,074”,“ 51,073”]的字符串arraylist,现在我要将其转换为Double ArrayList并计算数组列表中数字的总和。

Here is the code : 这是代码:

private ArrayList<String> totals = new ArrayList<>();
private ArrayList<Double> demototal = new ArrayList<>();
String total = itemData.getString(ParseBarcode.KEY_TOTAL);
totals.add(total);

/*converting all values from totals array to Double and add to arraylist demototal*/
for (int i = 0; i < totals.size(); i++) {
    final String value = totals.get(i);
    double total_ary = Double.parseDouble(value);
    demototal.add(total_ary);
}

String amount = ""+setArrayListElement(demototal);
        textViewSum.setText(amount);//set total text to amount


//calculate amount here we pass setArrayListElement as Double arraylist
private Double setArrayListElement(ArrayList inArray) {
    Double amount = 0.0d;
    for (int i = 0; i < inArray.size(); i++) {
       amount = amount + Double.valueOf((Double) inArray.get(i));
    }
    return amount;
}

This gives me java.lang.NumberFormatException: Invalid double: "51,073" exception. 这给我java.lang.NumberFormatException: Invalid double: "51,073"异常。

For more clarity I am adding some more code. 为了更加清晰,我添加了更多代码。

 private void showItem(String json) {
    String itembarcode = "";
    String itemdesc = "";
    String weight = "";
    String rate = "";
    String making = "";
    String netrate = "";
    String total = "";


    try {
        JSONObject jsonObject = new JSONObject(json);
        JSONArray result = jsonObject.getJSONArray(ParseBarcode.JSON_ARRAY);
        JSONObject itemData = result.getJSONObject(0);
        itembarcode = itemData.getString(ParseBarcode.KEY_BARCODE);
        itemdesc = itemData.getString(ParseBarcode.KEY_DESC);
        weight = itemData.getString(ParseBarcode.KEY_WEIGHT);
        rate = itemData.getString(ParseBarcode.KEY_RATE);
        making = itemData.getString(ParseBarcode.KEY_MAKING);
        netrate = itemData.getString(ParseBarcode.KEY_NETRATE);
        total = itemData.getString(ParseBarcode.KEY_TOTAL);
    } catch (JSONException e) {
        e.printStackTrace();
    }


    //table started

    TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
    TableRow.LayoutParams rowParams = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f);
    rowParams.setMargins(16, 0, 16, 0);

    TableLayout tableLayout = new TableLayout(AddInvEst.this);
    tableLayout.setLayoutParams(tableParams);

    TableRow newRow = new TableRow(AddInvEst.this);
    newRow.setLayoutParams(tableParams);

    barCode = new TextView(AddInvEst.this);
    barCode.setLayoutParams(rowParams);
    barCode.setGravity(Gravity.CENTER);

    itemDesc = new TextView(AddInvEst.this);
    itemDesc.setLayoutParams(rowParams);
    itemDesc.setGravity(Gravity.CENTER);

    weightLine = new TextView(AddInvEst.this);
    weightLine.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.75f));
    weightLine.setGravity(Gravity.CENTER);

    rateAmount = new EditText(AddInvEst.this);
    rateAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f));
    rateAmount.setGravity(Gravity.CENTER);
    rateAmount.addTextChangedListener(rateTextWatcher);

    makingAmount = new EditText(AddInvEst.this);
    makingAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f));
    makingAmount.setGravity(Gravity.CENTER);
    makingAmount.addTextChangedListener(mkAmountTextWatcher);

    netRate = new TextView(AddInvEst.this);
    netRate.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f));
    netRate.setGravity(Gravity.CENTER);
    netrates.add(netrate);

    itemtotal = new TextView(AddInvEst.this);
    itemtotal.setLayoutParams(rowParams);
    itemtotal.setGravity(Gravity.CENTER);
    totals.add(total);

    //converting all values from totals array to Double and add to arraylist demototal
    for (int i = 0; i < totals.size(); i++) {
        final String value = totals.get(i);
        double total_ary = Double.parseDouble(value.replace(",","."));
        demototal.add(total_ary);

    }

    barCode.setText(itembarcode);
    itemDesc.setText(itemdesc);
    weightLine.setText(weight);
    rateAmount.setText(rate);
    makingAmount.setText(making);
    netRate.setText(netrate);
    itemtotal.setText(total);
    String amount = ""+setArrayListElement(demototal);
    textViewSum.setText(amount);//set total text to amount

    newRow.addView(barCode);
    newRow.addView(itemDesc);
    newRow.addView(weightLine);
    newRow.addView(rateAmount);
    newRow.addView(makingAmount);
    newRow.addView(netRate);
    newRow.addView(itemtotal);
    itemTable.addView(newRow);

}

//calculate amount here we pass setArrayListElement as Double arraylist
private Double setArrayListElement(ArrayList inArray) {
    Double amount = 0.0d;
    for (int i = 0; i < inArray.size(); i++) {
        amount = amount + Double.valueOf((Double) inArray.get(i));
    }
    return amount;

}

This is the code for textwatcher and calculating the netrate and item total. 这是用于textwatcher并计算净费率和项目总计的代码。

private void calculateAndShow(double wt, double rt, double mk) {
    String w = weightLine.getText().toString();
    wt = Double.parseDouble(w);
    double NetRate = rt + mk;
    double Total = (NetRate / 10) * wt;

    netRate.setText(NetRate + "");
    itemtotal.setText(Total + "");
}

private TextWatcher rateTextWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        String rate = rateAmount.getText().toString();
        rt = Double.parseDouble(rate);
        calculateAndShow(wt, rt, mk);
        rates.add(rate);


    }
};

private TextWatcher mkAmountTextWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        String mkAmt = makingAmount.getText().toString();
        mk = Double.parseDouble(mkAmt);
        calculateAndShow(wt, rt, mk);
        mkCharges.add(mkAmt);

    }
};

You cant use a , in your value to parse to a double 您不能在值中使用来解析为双精度

Try: 尝试:

double total_ary = Double.parseDouble(value.replace(",","."));
  ArrayList<String> hello = new ArrayList<>();

    double[] bye = new double[hello.size()]; 

    for (int i = 0; i < hello.size(); ++i) { 
        bye[i] = Double.parseDouble(hello.get(i)); 
    }

Double.parseDouble(value) replace之前, Double.parseDouble(value) replace “,” Double.parseDouble(value) replace为“。”。

Try: 尝试:

List<Double> list2 = totals.stream().map(c -> c.replace(",",".")).map(Double::parseDouble).collect(Collectors.toList());
Double sum = list2.stream().reduce((x,y)->x+y).get();

Or if you just want the sum: 或者,如果您只想要总和:

Double sum = totals.stream.map(c -> c.replace(",",".")).map(Double::parseDouble).reduce((x,y)->x+y).get();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM