java - 限制显示的小数位数并仅采用小数继续数学运算

标签 java android math decimal limit

我什至不知道如何开始,但我会尽力解释自己。

在 XML 中我必须编辑文本:

<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. 根据对“displayTime”进行数学计算的值,逗号之前的值我想将其按原样显示在另一个字段上,但是,在第一个数学运算后得到的小数我必须将其乘以0.6 ant 将结果添加为逗号之前的值的小数。

我希望你们中至少有人能明白我所看到的以及我尽力解释的图片。 我知道我要求太多,但经过几个小时的寻找,我却空手而归。尝试了我能找到和想到的所有方法,但由于我第一周使用 Java 和 XML 时遇到了很大的限制,我可以进一步完善我的应用程序。

感谢大家抽出时间,至少阅读这个故事,然后也许抽出时间回答和解释......

最诚挚的问候, 罗伯特

最佳答案

我没有正确理解你的第二个问题,但对于第一个问题,你可以使用如下所示的 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

我的印象是您必须将其显示在文本字段中。对不起。 您始终可以将此字符串解析为 Double 值。

Double value = Double.parseDouble(your_string);

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

关于java - 限制显示的小数位数并仅采用小数继续数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034514/

相关文章:

java - java中参数化类可以扩展自身吗?

java - J2EE 配置期间出现错误

ios - 如何使用 Core Graphics 在 iOS 中计算和绘制尺寸线(具有垂直端线的线)?

java - 安装 scala android eclipse 插件

python - 将 1.41069562657e-25 打印为 1.41*10^-25

algorithm - 如何以最小的成本使用符号 + * () 和 1 来表示整数?

java - 通过触摸监听器让用户在屏幕上移动,但存在条件被多次调用的问题

java - 如何使用上下文路径将外部文件夹正确映射到 Tomcat server.xml 文件中?

android - 带有 Android-Universal-Image-Loader 的 Monodroid

android - 当手机改变方向时,Air Android 应用程序崩溃