在没有指数格式的情况下将 bigdecimal 转换为 double
Converting big decimal to double without exponential format
我正在对高小数精度 BigDecimal 对象进行计算。
我正在使用需要双精度参数的第三方库。当我尝试将其转换为 double 时,我得到的是指数格式的值而不是小数。
BigDecimal 0.000035000000000
Double 3.5E-5
BigDecimal bd;
BigDecimal(0.0000349999999995631583260546904057264328002929687500);
bd= bd.setScale(15,BigDecimal.ROUND_CEILING);
Log.i("bd","bd "+bd.toPlainString());
Log.i("bd","double"+bd.doubleValue());
我发现了多种方法可以将此 3.5E-5 值转换为正确的小数点,但仅限于字符串格式。而我需要 double
中的值
在String对象中可以不用exponential获取 但double中不行
DecimalFormat df = new DecimalFormat("#");
df.setMaximumFractionDigits(16);
String test=df.format(bd,doubleValue());
System.out.println("op2 "+test);
Double test1=Double.parseDouble(test);
System.out.println("op2 "+test1);
OUTPUT op2 .000035 op2 3.5E-5
自从几天以来我一直在努力寻找解决方案,因为我无法控制要求值是双精度的第 3 方库
推荐链接
Format BigDecimal without scientific notation with full precission
Converting exponential value in java to a number format
Conversion from exponential form to decimal in Java
How to resolve a Java Rounding Double issue
Java BigDecimal without E
How to Avoid Scientific Notation in Double?
我的问题与这些链接不同,我不想要没有指数的双精度字符串,而是我只想要双精度格式。
编辑
如果传递的double值是指数格式,NDK based libary会进一步对这个对象做计算,这会导致更多的小数点和更大的指数值。所以,我想传递一个没有 E
的简单双精度值
您似乎混淆了 double
,一个 64 位值,其中不同的位具有不同的含义,它的字符串表示形式。
我们取 0.015625
的值。在内部,double 表示为 64 位(我现在不知道是哪种位组合,但这无关紧要)。
但字符串表示取决于您使用的库的格式设置。请注意,表示法 0.015625
和 1.5625E-2
表示完全相同的双精度值。 double 不存储为字符串,它不包含 .
或 E
,只是一些位。这些位的组合形成了它的真实值,无论你如何将它表示为字符串,它都是一样的。如果您有不同的格式设置,结果也可以是 1.56E-2
。这只是意味着将 double
的内部位组合转换为字符串的代码进行了一些舍入。
因此,要从 BigDecimal
获得 double
,只需使用 bd.doubleValue()
。没有必要使用中间字符串表示,这样做甚至可能是有害的,因为如果字符串表示执行一些舍入,您将无法获得 BigDecimal
中值的最佳近似值。
所以,bd.doubleValue()
是唯一正确的方法。这不是 return 特定格式,它只是 return 最接近 BigDecimal
.
中的值的 double
同样,不要将 double
类型与其表示为字符串的方式混淆。这些是不同的东西。 double
是 double
是 double
,它不是存储为字符串,指数或普通或四舍五入或其他。
实际上,BigDecimal.toString()
和 BigDecimal.toPlainString()
也是 return 相同 BigDecimal
的不同字符串表示形式。据我所知,甚至还有第三个字符串转换函数 toEngineeringString()
,它为您提供了相同 BigDecimal
的另一种字符串表示形式。这与 double
类似:具有不同参数的不同输出例程 return 完全相同值的不同字符串。
使用这个:amount=value 从字符串转换为 double
double dd = new BigDecimal(amount).doubleValue();
String val = String.format("%.4f", dd);
BigDecimal bd = BigDecimal.valueOf(Double.valueOf(val));
Double d=bd.doubleValue() ;
DecimalFormat formatter = new DecimalFormat("0.0000");
System.out.println("doubleValue= " + formatter .format(d));
我正在对高小数精度 BigDecimal 对象进行计算。
我正在使用需要双精度参数的第三方库。当我尝试将其转换为 double 时,我得到的是指数格式的值而不是小数。
BigDecimal 0.000035000000000 Double 3.5E-5
BigDecimal bd;
BigDecimal(0.0000349999999995631583260546904057264328002929687500);
bd= bd.setScale(15,BigDecimal.ROUND_CEILING);
Log.i("bd","bd "+bd.toPlainString());
Log.i("bd","double"+bd.doubleValue());
我发现了多种方法可以将此 3.5E-5 值转换为正确的小数点,但仅限于字符串格式。而我需要 double
中的值在String对象中可以不用exponential获取 但double中不行
DecimalFormat df = new DecimalFormat("#");
df.setMaximumFractionDigits(16);
String test=df.format(bd,doubleValue());
System.out.println("op2 "+test);
Double test1=Double.parseDouble(test);
System.out.println("op2 "+test1);
OUTPUT op2 .000035 op2 3.5E-5
自从几天以来我一直在努力寻找解决方案,因为我无法控制要求值是双精度的第 3 方库
推荐链接
Format BigDecimal without scientific notation with full precission
Converting exponential value in java to a number format
Conversion from exponential form to decimal in Java
How to resolve a Java Rounding Double issue
Java BigDecimal without E
How to Avoid Scientific Notation in Double?
我的问题与这些链接不同,我不想要没有指数的双精度字符串,而是我只想要双精度格式。
编辑
如果传递的double值是指数格式,NDK based libary会进一步对这个对象做计算,这会导致更多的小数点和更大的指数值。所以,我想传递一个没有 E
的简单双精度值您似乎混淆了 double
,一个 64 位值,其中不同的位具有不同的含义,它的字符串表示形式。
我们取 0.015625
的值。在内部,double 表示为 64 位(我现在不知道是哪种位组合,但这无关紧要)。
但字符串表示取决于您使用的库的格式设置。请注意,表示法 0.015625
和 1.5625E-2
表示完全相同的双精度值。 double 不存储为字符串,它不包含 .
或 E
,只是一些位。这些位的组合形成了它的真实值,无论你如何将它表示为字符串,它都是一样的。如果您有不同的格式设置,结果也可以是 1.56E-2
。这只是意味着将 double
的内部位组合转换为字符串的代码进行了一些舍入。
因此,要从 BigDecimal
获得 double
,只需使用 bd.doubleValue()
。没有必要使用中间字符串表示,这样做甚至可能是有害的,因为如果字符串表示执行一些舍入,您将无法获得 BigDecimal
中值的最佳近似值。
所以,bd.doubleValue()
是唯一正确的方法。这不是 return 特定格式,它只是 return 最接近 BigDecimal
.
double
同样,不要将 double
类型与其表示为字符串的方式混淆。这些是不同的东西。 double
是 double
是 double
,它不是存储为字符串,指数或普通或四舍五入或其他。
实际上,BigDecimal.toString()
和 BigDecimal.toPlainString()
也是 return 相同 BigDecimal
的不同字符串表示形式。据我所知,甚至还有第三个字符串转换函数 toEngineeringString()
,它为您提供了相同 BigDecimal
的另一种字符串表示形式。这与 double
类似:具有不同参数的不同输出例程 return 完全相同值的不同字符串。
使用这个:amount=value 从字符串转换为 double
double dd = new BigDecimal(amount).doubleValue();
String val = String.format("%.4f", dd);
BigDecimal bd = BigDecimal.valueOf(Double.valueOf(val));
Double d=bd.doubleValue() ;
DecimalFormat formatter = new DecimalFormat("0.0000");
System.out.println("doubleValue= " + formatter .format(d));