有没有方法可以将java中的.
删除为double
值?
示例:
56.11124
到
5611124
答案 0 :(得分:4)
我不认为有一种数学方法可以找出双精度中有多少小数。您可以转换为String
,替换点,然后将其转换回来:
Double.parseDouble(Double.toString(56.11124).replace(".", ""));
虽然解析结果时要小心溢出!
答案 1 :(得分:1)
这可能有效
class Example {
public static void main(String[] args) {
double val = 56.1112;
while( (double)((int)val) != val )
{
val *= 10;
}
System.out.printf( "%.0f", val );
}
}
输出: 561112
这可以通过将double转换为int来截断浮动信息56.11124 => 56
。当值不相等时,将它乘以基数以推出.
。我不知道这是不是最好的方式。
答案 2 :(得分:1)
这是一种方法,
首先,将double转换为字符串。然后,调用replace
以空字符串替换.
。之后,将结果解析为int:
double d = 5.1;
String doubleString = Double.toString(5.1);
String removedDot = doubleString.replace(".", "");
int result = Integer.parseInt(removedDot);
显然,如果double的字符串表示形式为5e16
等科学记数法,则不起作用。这也不适用于整数double值,例如5
,因为它的字符串表示为5.0
。
double
本质上是不准确的。 5
和5.0
值相同。这就是为什么你不能真正做这种操作。您是否期望a
和b
的结果不同?
double a = 5;
double b = 5.0;
如果你这样做,那么你就无法真正做到这一点,因为没有办法知道程序员在运行时写的是什么。
答案 3 :(得分:0)
您可以转换为BigDecimal
并使用unscaledValue
方法:
BigInteger unscaled = new BigDecimal(myDouble).unscaledValue();
根据您的预期输出,您还可以使用BigDecimal#valueof(double)
创建中间BigDecimal
。
Javadoc for BigDecimal#new(double)
答案 4 :(得分:-1)
您可以将其转换为String
并移除.
并将其转换回double
类似
double value = 56.11124;
value = Double.valueOf(("" + value).replace(".", "")).doubleValue();
这将返回5611124.0,因为它有一个双倍的浮点数。您可以将其转换为int
,但您必须注意可能的溢出。否则它看起来像这样
int normalized = (int) value;