如何在android中添加两个没有指数的双精度值

Posted

技术标签:

【中文标题】如何在android中添加两个没有指数的双精度值【英文标题】:How can i add two double values without exponential in android 【发布时间】:2012-03-05 12:17:44 【问题描述】:

请帮我解决这个问题。我试图从 textview 中获取值并存储为字符串。然后它转换为双倍。虽然最多可以转换 7 个字符,但如果我尝试添加超过 7 个字符,结果是 1.23456789E8。这是我的代码

String value = tvInput.getText().toString();
\\tvInput is my textView
Double result = 0.0;
Double input1=0.0;
Double input2=0.0;
input=Double.parseDouble(value);
result = input1 + input2;
tvInput.setText(Double.toString(result));

如果我将 input1 值作为 1234567 并将 input2 作为 1234567 我得到正确的结果,但如果将 input1 作为 12345678 和 input2 作为 3. 输出是 1.2345681E7

【问题讨论】:

【参考方案1】:

你得到的值是正确的,问题在于你的打印方式。

您依赖 toString 来实现双重输出;如果要保证没有指数符号,则应使用DecimalFormat 或String.format 对其进行格式化;

DecimalFormat myFormatter = new DecimalFormat("############");
tvInput.setText(myFormatter.format(result));

另见the format documentation

【讨论】:

谢谢Joeri Hendrickx先生,我解决了我的问题 @sam np。如果这解决了您的问题,请接受答案。单击答案左侧的复选标记图标,使其变为绿色。谢谢! @JoeriHendrickx haha​​hah 不错的答案以及接受答案的不错解释。“单击答案左侧的复选标记图标使其变为绿色”这一行非常棒:P【参考方案2】:

您描述的行为与javadoc 一致。你可以改用String.format。

【讨论】:

【参考方案3】:

123456781.2345678E7 是完全相同的数字。没问题

你的问题在于表示,如果 E>6 则 toString() 使用科学记数法。您可能需要为此使用 NumberFormat。

【讨论】:

【参考方案4】:

使用String.format:example

class Main

  public static void main (String[] args) throws java.lang.Exception
  
     String i1 = "12345678";
     String i2 = "3";
     double d1 = Double.parseDouble(i1);
     double d2 = Double.parseDouble(i2);
     double d = d1 + d2;
     System.out.println( String.format("%f", d) ); 
  

【讨论】:

【参考方案5】:

为什么不使用整数呢?

String value = tvInput.getText().toString();
\\tvInput is my textView
int result = 0;
int input1 = 0;
int input2 = 0;
input=Integer.parseInt(value);
result = input1 + input2;
tvInput.setText(Integer.toString(result));

【讨论】:

以上是关于如何在android中添加两个没有指数的双精度值的主要内容,如果未能解决你的问题,请参考以下文章

在 Scala Java Play 框架中格式化没有小数的双精度并为数千添加逗号

打印没有科学格式的双精度并四舍五入到最接近的整数[关闭]

如何格式化数据库中的双精度数据并在 Android 上使用逗号作为小数分隔符设置到 Textview

返回没有尾随零的双精度类型

格式化像货币一样但没有货币符号的双精度值(C#)

如何在小数点后将 Dart 中的双精度数舍入到给定的精度?