Eclipse(Android) - 程序显示小数和" E"

时间:2014-11-08 20:51:54

标签: java android eclipse

程序显示带小数和“E”字符的结果。 示例:n = 35,然后当我按下计算按钮时,它会显示带小数的结果:922746.0000001我不想要任何小数我只想要主号码(922746)我该如何解决?

还有其他一些例子:当我把n = 36时它显示我错了(它显示我1.4930352000000019E7)如何删除E字符(我想显示完整结果)并设法获得正确的结果?

感谢您的帮助。

这是我的Java代码;

    package com.example.fibonaccicalculator;
    import android.os.Bundle;
    import android.support.v7.app.ActionBarActivity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;

    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;


    public class MainActivity extends ActionBarActivity  {
        Button btn1;
        TextView tv1;
        EditText edt1;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment_main);
            btn1 = (Button) findViewById(R.id.btn1);
            tv1 = (TextView) findViewById(R.id.tv1);
            edt1 = (EditText) findViewById(R.id.edt1);

            btn1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    double n = Double . valueOf(edt1.getText().toString());
                    double a = (1 / (Math.sqrt(5))); 
                    double b = ((1+(Math.sqrt(5)))/2); 
                    double c = ((1-(Math.sqrt(5)))/2); 
                    double i = a * ((Math.pow(b,n)) - (Math.pow(c,n)));
                    String k = String.valueOf(i);
                    tv1.setText( k );                           
                }
            });
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }

2 个答案:

答案 0 :(得分:1)

获得这些结果的原因是因为您使用的是String.valueOf()
试试这个:

String k = String.format("%d",(int) i);

或者这个:

int i = (int) f;
String k = Integer.toString(i);

这样你就会得到一个转换后的字符串,其中包含没有任何小数的double值。

String.valueOf正在使用格式化程序(检查Double.toString()的Javadoc描述以获取有关其工作原理的详细信息)。
https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#toString%28double%29

如果您需要特定的表示而不是查看此课程:
https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html

另请参阅此valueOf() Method教程,了解String.valueOf()的工作原理。

答案 1 :(得分:0)

如果您要删除所有尾随小数值,您只需typecast doubleint

double val = 922746.0000001;
int noDecimals = (int) val; // this gives 922746

如果您想要更灵活地使用舍入值,可以使用BigDecimal类和RoundingMode

double round(double number, int decimalPlaces) {
    if(decimalPlaces == 0) { // to remove all values after the dot
        return (int) number;
    }
    BigDecimal bd = new BigDecimal(number).setScale(decimalPlaces, RoundingMode.HALF_EVEN);
    return bd.doubleValue();
}

或者你可以使用Math.round()方法并制作一个小辅助函数,如:

double round(double number, int decimalPlaces) {
    if(decimalPlaces == 0) { // to remove all values after the dot
        return (int) number;
    }
    int format = (int) Math.pow(10.0, decimalPlaces);
    return (double) Math.round(format * number)  / format;
}

上述方法的示例程序:

public static void main(String[] args) {
    double val1 = 922746.0000001;
    double val2 = 1.4930352000000019E7;
    int decimalPlaces = 0;
    System.out.println((int)round1(val1, decimalPlaces));
    System.out.println((int)round2(val1, decimalPlaces));
    System.out.println((int)round1(val2, decimalPlaces));
    System.out.println((int)round2(val2, decimalPlaces));
}

输出:

922746
922746
14930352
14930352