我正在尝试在Java中将String转换为Double。我从客户端获取跟随String,“1131.00”但是当我将它转换为Double时,我回到1131.0,这是不正确的。我期待1131.00(.00 - 有两个零)
_dPaymentAmt = ConvertUtil.stringToDouble(sPaymentAmt, 0.0);
public static double stringToDouble(String str, double dDefaultValue)
throws Exception
{
double doubleValue = 0;
try
{
doubleValue = Double.parseDouble(str);
}
catch (Exception e)
{
doubleValue = dDefaultValue;
}
return doubleValue;
}
如何在十进制后保持两个零?
编辑:其中一个中间层删除小数点,将值发送到bank,bank将其除以100来计算小数。因此,如果我发送1311.0,银行费用为131.10 ......所以我必须保持两个小数点,将其保持为DOUBLE值。
答案 0 :(得分:11)
double
不会保留无效的十进制数字。这只是一个幅度 - 所以1131 == 1131.0 == 1131.00。 正确将“1131.00”转换为1131.0。它可能不是你想要的,但它是正确的。
如果您实际上试图存储一个总是有两位小数的值(例如货币),那么您可能不应该使用double
来开始。使用BigDecimal
或存储整数分数(或您存储的任何类型的数据)。
显示BigDecimal
工作的示例:
import java.math.*;
public class Test {
public static void main (String[] args) throws Exception {
BigDecimal bd = new BigDecimal("1311.00");
System.out.println(bd); // 1311.00
}
}
请注意,将货币值存储为double
(或任何类型的浮动二进制点数)几乎始终不合适。
如果上述内容不符合您的要求,请提供更多背景信息。
答案 1 :(得分:5)
double
不区分1131.0
和1131.00
:当存储在double
变量中时,它们的编号完全相同。
您可能希望将这些数字保留为Strings
,或使用BigDecimal
。
答案 2 :(得分:2)
使用java.math.BigDecimal
:
String dblStr = "1131.00";
BigDecimal bd = new BigDecimal(dblStr);
System.out.println("BD is " + bd);
答案 3 :(得分:1)
这是所有格式化。 double对象不包含对有多少个零的任何引用....这就是你打印它的方式。在数学中,1311.00与1311完全相同,所以它并不关心那些零。如果要保持零,则应该正确格式化。
答案 4 :(得分:0)
您希望在double
数据类型中保留两个小数位是没有意义的。考虑到数值,1131.0和1131.00完全相同,因此double数据类型将值保持为1131.0。
如果您需要保存小数位,请将其保留为String。
答案 5 :(得分:0)
它就像下面的代码一样简单:
public void GetTwoDecimal(){
double d = 2.34568;
DecimalFormat f = new DecimalFormat("##.00"); // this will helps you to always keeps in two decimal places
System.out.println(f.format(d));
}
答案 6 :(得分:0)
尝试这样:我相信你的问题会得到解决。
import java.text.*;
public class Demo
{
public static void main(String args[])
{
String str = "131.0000"; // keep as many zeroes
double d1 = Double.parseDouble(str);
DecimalFormat df = new DecimalFormat("0.00");
System.out.print(df.format(d1));
}
}
答案 7 :(得分:-1)
创建格式(例如format.money(“$ 0.00”))。 Java可能有内置的处理钱的格式。如果你想要两个小数位,请使用货币格式。