将双精度转换为字符串

Posted

技术标签:

【中文标题】将双精度转换为字符串【英文标题】:Converting double to string 【发布时间】:2011-08-11 14:23:50 【问题描述】:

我不确定是我还是什么,但我在时遇到问题。

这是我的代码:

double total = 44;
String total2 = Double.toString(total);

是我做错了什么还是我错过了一步。

我在尝试转换时收到错误 NumberFormatException

totalCost.setOnTouchListener(new OnTouchListener() 
  public boolean onTouch(View v, MotionEvent event) 
    try 
      double priceG = Double.parseDouble(priceGal.getText().toString());
      double valG = Double.parseDouble(volGal.toString());
      double total = priceG * valG;
      String tot = new Double(total).toString();
      totalCost.setText(tot);
     catch(Exception e) 
      Log.e("text", e.toString());
    

    return false;
           
);

我正在尝试在 onTouchListener 中执行此操作。生病发布更多代码,基本上当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。

【问题讨论】:

我觉得很好,你遇到了什么问题? 这是您正在执行的真实代码吗?这些线条完美无缺。 Double.toString(double) 甚至不能抛出 NumberFormatException - 你确定异常不是从其他地方抛出的吗? 一定有别的东西,这应该可以正常工作。 ideone.com/btGrv 显示堆栈跟踪和整个代码 【参考方案1】:
double total = 44;
String total2 = String.valueOf(total);

这会将双精度转换为字符串

【讨论】:

请记住以下几点 上述任何解决方案? @PrashanthDebbadwar 是:NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999); 然后使用total2 = fmt.format(total) 这在内部调用Double.toString()。不知道它是如何回答这个问题的。 String.format ("%.0f", bigDouble)【参考方案2】:

使用 Double.toString(),如果数字太小或太大,你会得到这样的科学计数法:3.4875546345347673E-6。有几种方法可以更好地控制输出字符串格式。

double num = 0.000074635638;
// use Double.toString()
System.out.println(Double.toString(num));
// result: 7.4635638E-5

// use String.format
System.out.println(String.format ("%f", num));
// result: 0.000075
System.out.println(String.format ("%.9f", num));
// result: 0.000074636

// use DecimalFormat
DecimalFormat decimalFormat = new DecimalFormat("#,##0.000000");
String numberAsString = decimalFormat.format(num);
System.out.println(numberAsString);
// result: 0.000075

使用 String.format() 将是最方便的方法。

【讨论】:

【参考方案3】:

此代码编译并为我工作。它使用您尝试的调用将双精度数转换为字符串。

public class TestDouble 

    public static void main(String[] args) 
        double total = 44;
        String total2 = Double.toString(total);

        System.out.println("Double is " + total2);
    

我对您看到 NumberFormatException 感到困惑。查看堆栈跟踪。我猜你还有其他代码没有在你的示例中显示导致抛出该异常。

【讨论】:

我对您看到 NumberFormatException 感到困惑。查看堆栈跟踪。我猜你还有其他代码没有在你的示例中显示导致抛出异常。 OP 的代码也是如此。这里没有问题需要解决。 可能,我正在尝试在 onTouchListener 中执行此操作。生病发布更多代码,基本上当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。【参考方案4】:

异常可能来自 parseDouble() 调用。检查赋予该函数的值是否真的反映了双精度值。

【讨论】:

【参考方案5】:
double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

它有效。必须重复。

【讨论】:

【参考方案6】:

科特林

您可以在 kotlin 中的任何数据类型上直接使用.toString,例如

val d : Double = 100.00
val string : String = d.toString()

【讨论】:

【参考方案7】:
double total = 44;
String total2 = new Double(total).toString();

【讨论】:

Double.toString() 调用 String.valueOf(double),后者调用 Double.toString(double)。疯了吧? OP 的代码也是如此。这里没有问题需要解决。 @Muhammed - 可能吗? 它就是这样做的 @Muhammed - 不,效率不高。请参阅发光编码器的评论。您正在创建一个新的Double 对象,然后调用其toString() 方法,该方法调用String.valueOf(double)最终 完成了OP 一开始所做的事情。 @Muhammed 好吧,您创建一个对象只是为了获取它的 String 值。如果这是在某种循环中,您可能会遇到很多额外的(不必要的)开销。我不喜欢过早优化,但我喜欢避免明显的缺陷。【参考方案8】:
double priceG = Double.parseDouble(priceGal.getText().toString());
double valG = Double.parseDouble(volGal.toString());

其中之一是抛出异常。您需要添加一些日志记录/打印以查看 volGalpriceGal 中的内容 - 这不是您的想法。

【讨论】:

我将总数更改为 44 这样的硬数字,但它仍然给了我一个错误。 什么“总计”?您的原始代码片段无法引发该异常。我上面显示的两个调用可以。您的Strings 之一不是double 的有效表示,这就是您遇到该异常的原因。 要清楚; Double.toString(total); 不能抛出异常。永远。。您将其更改为 new Double(total).toString(); 也不能,如果您在此处看到已被否决的答案,这不是您想做的事情。 好吧,我改变了。我将那一点代码从 ontouchlistener 中移出,它运行良好。但是当它在 ontouchlistener 中时,它会抛出错误。我正在尝试在 onTouchListener 中执行此操作。生病发布更多代码,基本上当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。【参考方案9】:

double.toString() 应该可以工作。不是变量类型Double,而是变量本身double

【讨论】:

您应该考虑到有时它会返回带有 E 科学记数法的数字,例如 -2.23561E5【参考方案10】:

只需使用以下内容:

doublevalue+""; 

这适用于任何数据类型。

示例:

Double dd=10.09;
String ss=dd+"";

【讨论】:

通过添加到空字符串来进行字符串化的非常不好的习惯。改用专用的 JDK 函数 @Michael.P 为什么不好? 作为一名 Java 程序员,我一直在这样做,哈哈。 除非有一些编译时优化在起作用,否则它会调用一个额外的构造函数和附加方法。 总是使用 String.valueOf(dd) 代替。这也适用于任何数据类型。【参考方案11】:

使用StringBuilder 类,像这样:

StringBuilder meme = new StringBuilder(" ");

// Convert and append your double variable
meme.append(String.valueOf(doubleVariable));

// Convert string builder to string
jTextField9.setText(meme.toString());

你会得到你想要的输出。

【讨论】:

【参考方案12】:

你做的时候怎么样

totalCost.setText(tot);

你就是这样做

totalCost.setText( "" + total );

"" + 会自动转换成字符串

【讨论】:

【参考方案13】:

完整信息

您可以将 String.valueOf() 用于 float、double、int、boolean 等。

double d = 0;
float f = 0;
int i = 0;
short i1 = 0;
char c = 0;
boolean bool = false;
char[] chars = ;
Object obj = new Object();


String.valueOf(d);
String.valueOf(i);
String.valueOf(i1);
String.valueOf(f);
String.valueOf(c);
String.valueOf(chars);
String.valueOf(bool);
String.valueOf(obj);

【讨论】:

【参考方案14】:

double转String的三种方式。

    Double.toString(d) String.valueOf(d)

    ""+d

    公共类 DoubleToString

    public static void main(String[] args) 
        double d = 122;
        System.out.println(Double.toString(d));
        System.out.println(String.valueOf(d));
        System.out.println(""+d);
    
    
    

要加倍的字符串

    Double.parseDouble(str);

【讨论】:

【参考方案15】:

当您想格式化小数并将其转换为 String DecimalFormat 时会有很大帮助。

示例:

DecimalFormat format = new DecimalFormat("#.####");
format.format(yourDoubleObject);

这些是在DecimalFomat 中作为模式的一部分支持的各种符号。

【讨论】:

【参考方案16】:

这是一篇很老的帖子,但这可能是最简单的转换方法:

double total = 44;
String total2 = "" + total;

【讨论】:

以上是关于将双精度转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

Java:将双精度数转换为字符串

SQL Server CE 转换/将双精度转换为字符串

将双精度转换为字符数组 C++

将双精度数转换为字符串时在小数点前保留零

在 C++ 中使用 boost::lexical_cast 将双精度转换为字符串?

将双精度转换为双精度,带一位小数和一位小数?