将双精度转换为字符串
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());
其中之一是抛出异常。您需要添加一些日志记录/打印以查看 volGal
和 priceGal
中的内容 - 这不是您的想法。
【讨论】:
我将总数更改为 44 这样的硬数字,但它仍然给了我一个错误。 什么“总计”?您的原始代码片段无法引发该异常。我上面显示的两个调用可以。您的String
s 之一不是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;
【讨论】:
以上是关于将双精度转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章