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() 返回一位小数的主要内容,如果未能解决你的问题,请参考以下文章

Java-计算百分比

java中2个或多个数字变量直接相乘相加减运算

Java String型数字比较问题

Double.parseDouble(String) 和 Double.valueOf(String) 有啥区别?

java中怎样把double基本数据类型包装在Double类

java中string与其他类型数据之类的转换