标题是不言而喻的。有什么好方法,最好是数学,从Java双变量中获取数字?
123 => 0
1.12 => 2
1.0001 => 4
2.340000 => 2
0.10 => 1例如,我有一个双d= 0.320。
据我所知,对于编译器/ jvm /计算机:
System.out.println(0.0100000 == 0.01); // prints true...发布于 2014-09-10 19:40:37
这应该可以得到12月之后的金额:
Double d = 123.9343;
String[] div = d.toString().split("\\.");
div[0].length(); // Before Decimal Count
div[1].length(); // After Decimal Count 解释性:您首先将double转换为字符串,并使用split函数将字符串从.拆分
一旦它分成2部分,您就可以使用length函数轻松地找到字符串的长度。
发布于 2014-09-10 20:18:09
简短版本:使用BigDecimal和它的scale()方法。请随意初始化。
长篇版本:
您特别提到,您更喜欢以前的解决方案。
double中获取数字数,大概是小数部分(根据您的预期输出)这里有一个使用java.math.BigDecimal的解决方案:
List<BigDecimal> list = new ArrayList<BigDecimal>() {{
add(BigDecimal.valueOf(0.0000000018));
add(BigDecimal.valueOf(123));
add(BigDecimal.valueOf(1.12));
add(BigDecimal.valueOf(1.0001));
add(BigDecimal.valueOf(2.340000));
add(BigDecimal.valueOf(0.10));
}};
for (BigDecimal bd : list) {
System.out.println(bd + " --> " + bd.scale());
}产出:
1.8E-9 --> 10
123 --> 0
1.12 --> 2
1.0001 --> 4
2.34 --> 2
0.1 --> 1注意,像这样从BigDecimal实例化double最终会给出令人惊讶的结果。以scale() of BigDecimal.valueOf(0.1 + 0.1 + 0.1)为例,即17。这是因为0.1 (以及范围内的大多数其他97%的数字)不能精确地用double表示,这会在计算中引入舍入误差。
还请注意,使用scale()函数时,涉及操作toString()结果的解决方案将失败。Double.toString()定义得很好,可以产生超出double的“十进制表示法”的输出范围。
发布于 2014-09-11 01:18:11
没有与您所提供的结果相一致的“Java double的数字数”的有用概念。double是二进制浮点数,而不是十进制浮点数,例如,Java double 1.12实际上是数字1.12000000000000010658141036401502788066864013671875,它在小数点之后有50位数,在所有重复零之前。
https://stackoverflow.com/questions/25773721
复制相似问题