java Double.valueOf() 返回一位小数
Posted
技术标签:
【中文标题】java Double.valueOf() 返回一位小数【英文标题】:java Double.valueOf() returns number with one decimal place 【发布时间】:2013-09-26 21:27:21 【问题描述】:我似乎无法理解这一点。如果尝试过以下方法:
DecimalFormat df = new DecimalFormat("00000.00");
DecimalFormat df = new DecimalFormat("######.##");
但以下行总是会生成 IllegalArgumentException。
double price = Double.valueOf(df.format(((EditText) view
.findViewById(R.id.edit_item_price)).getText().toString()));
// Sample input passed is value of 200 or some other whole number.
item.setPrice(price);
这没有意义,因为我只是复制了这个论坛中明显的解决方案。你们中的大多数人都可以使用 format()。
最初,我没有这些代码行。我只是在获得商品价格后调用我的 setPrice() 方法。这行得通。但是,Double.valueOf() 有个讨厌的习惯,就是只使用一位小数。
例如通过了 200。我在项目对象中得到 200.0。我想通过使用 DecimalFormat 可以防止这种情况发生,但似乎这反而让我更头疼了。
【问题讨论】:
显然,这段代码作为一个独立的 java 应用程序工作。仅在与 android 应用程序一起使用时才会失败。 【参考方案1】:当您说您通过 200 并获得 200.0 时,您的意思是您获得双倍值?如果是这样,那没关系 - 它是一个数字,200 = 200.0 表示双精度值。
【讨论】:
好吧,看来我在为这么毫无意义的事情大惊小怪。我正在将这些数据捕获到数据库中,并意识到我不需要这样做。所以我只是格式化了数字,因为它被从数据库中拉出并呈现在屏幕上。你的建议有帮助。谢谢【参考方案2】:format(...) 将双精度值转换为字符串值。你有它相反的方式。这就是你得到异常的原因。
如果价格变量实际上是双精度值,你应该这样做
double price = Double.valueOf(((EditText) view
.findViewById(R.id.edit_item_price)).getText().toString())
但我认为你希望价格是一个字符串,那么你应该将 EditText 中的文本转换为双精度文本,然后将双精度文本转换回带有 new DecimalFormat("0.00")
之类的字符串
【讨论】:
对不起,我没有准确地复制我的代码,我添加了缺少的 valueOf()。主要问题是格式本身会失败。即使你声明了一个不同的变量来保存它。以上是关于java Double.valueOf() 返回一位小数的主要内容,如果未能解决你的问题,请参考以下文章
Double.parseDouble(String) 和 Double.valueOf(String) 有啥区别?