限制显示的小数位数并仅使用小数来继续数学运算

时间:2016-08-19 08:31:54

标签: java android math decimal limit

我甚至不确定如何开始,但我会尽力解释自己。

XML中的

我必须使用EditTexts:

<EditText
        android:id="@+id/auftraggesamt_edit_text"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:background="#616161"
        android:imeOptions="actionDone"
        android:inputType="number"
        android:maxLength="5"
        android:textAlignment="textEnd"
        android:textColor="#ffffff"
        android:textCursorDrawable="@color/colorWhite"
        android:textStyle="bold"
        />

<EditText
        android:id="@+id/vorgabezeit"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:background="#616161"
        android:imeOptions="actionDone"
        android:inputType="numberDecimal"
        android:maxLength="5"
        android:textAlignment="textEnd"
        android:textColor="#ffffff"
        android:textCursorDrawable="@color/colorWhite"
        android:textStyle="bold"
        />

第一个定义为数字,第二个定义为numberDecimal。在第一个我只允许插入圆数,在第二个我也需要小数。 现在,在Java中:

public class MainActivity extends AppCompatActivity {

int procente = 120;
int mitarbeiter = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.button)
            .setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    displayTarget((procente / Double.parseDouble(((EditText) findViewById(R.id.vorgabezeit))
                            .getText().toString())) * mitarbeiter) ;
                    displayTime((Double.parseDouble(((EditText) findViewById(R.id.auftraggesamt_edit_text))
                            .getText().toString())) / ( procente /  Double.parseDouble(((EditText) findViewById(R.id.vorgabezeit))
                            .getText().toString()) * mitarbeiter ) );
                }
            });
}

这里(对你来说比对我这样的新手更明显)是另外定义了2个变量,采用了TextEdit值并完成了数学运算。 (感谢另一个stackoverflow用户)。

现在,在下面的行中,我将值输出给用户:

private void displayTarget(double number) {
    TextView priceTextView = (TextView) findViewById(R.id.rezultat);
    priceTextView.setText(number + "  stück/std.");}

private void displayTime(double timp) {
    TextView timeTextView = (TextView) findViewById(R.id.rezultat_ore);
    timeTextView.setText(timp + "  std");}

现在问题的一部分:)

  1. 两个结果都返回如下值:36.641221374045806(和第二个:3.2749999999999995)。显示的小数位数是天文数字。 4或5位小数对我和我无法做的其他数学部分来说已经绰绰有余了。因此,问题是:如何使用我已经拥有的代码将屏幕上显示的小数位数限制为用户。

  2. 从得到的值得到&#34; displayTime&#34;,逗号之前的值我想在另一个字段上显示它,但是,在第一次数学运算后产生的小数我必须将它与0.6蚂蚁相乘,结果作为逗号前面的值的小数加起来。

  3. 我希望至少有一个人在我看到它时得到了照片,并且我尽力解释它。 我知道我的要求很多,但经过几个小时的搜索,我空手而归。尝试了所有我能找到并想到的东西但是由于我在Java和XML的第一周出现了大的限制,我可以继续使用我的应用程序。

    感谢大家的时间,至少是为了阅读这个故事,然后,也许是时候回答和解释......

    祝你好运, 罗伯特

2 个答案:

答案 0 :(得分:1)

我没有正确理解你的第二个问题,但对于问题一,你可以使用如下的DecimalFormat:

DecimalFormat format = new DecimalFormat();
format.setMaximumFractionDigits(2);
String formattedText = format.format(your_variable);

您始终可以操纵字符串以获得所需的结果。

    String full = "45.98";
    String substr1=full.substring(full.indexOf(".") + 1); //will return 98
    String substr2=full.substring(0, full.indexOf(".")); //willreturn 45

我的印象是你必须在TextField中显示它。抱歉。 您始终可以将此String解析为Double值。

Double value = Double.parseDouble(your_string);

完成所有这些类型转换后,我认为可能有更好的方法来实现相同的转换。

答案 1 :(得分:0)

要回答问题的第一部分,以下代码将根据您选择的精度限制小数点后显示的位数。 请注意,这会返回一个字符串并相应地对其进行舍入。

replace