如何在Java中将0.xxxx更改为xxxx

时间:2010-07-29 02:42:44

标签: java math

如上所述。我举一个例子,假设所有测试值小于1但大于0。

  • 0.12(精度:3,比例:2)
  • 0.345(精度:4,比例:3)
  • 0.6789(精度:5,比例:4)

如何在不对比例和精度值进行硬编码的情况下转换这些值。

  • 0.12 - > 12
  • 0.345 - > 345
  • 0.6789 - > 6789

对于0.1和0.01和0.001应该得到1(我知道这是个坏主意,但我已经获得了该软件的业务规则集

我更喜欢java中的解决方案,但如果有数学算法则更好。 感谢。

5 个答案:

答案 0 :(得分:11)

解决方案比这里介绍的任何人都简单得多。你应该使用BigDecimal:

BigDecimal a = new BigDecimal("0.0000012");
BigDecimal b = a.movePointRight(a.scale());

答案 1 :(得分:4)

乘以10直到trunc x = x。

类似(未经测试的代码):

double val = ... ; // set the value.

while(Math.floor(val) != val)
    val *= 10.0;

答案 2 :(得分:3)

一个选项是简单地转换为字符串,在小数点上拆分,并在它返回到整数后抓取该部分:

Integer.parseInt((Double.toString(input_val).split('\\.'))[1])

(注意:您可能希望在此过程中执行一些错误检查;上面的示例代码是专为传达这一点而设计的精简版本。)

答案 3 :(得分:0)

改善Amber的想法:

//for 0 <= x < 1
Integer.parseInt((Double.toString(x).replaceFirst("0.", ""));

它可以从任何低于1的值运行良好。任何值1及以上将触发java.lang.NumberFormatException

编辑:如果数据如下,有人可以告诉我区别吗?

0.0012 -> 12
0.12   -> 12

答案 4 :(得分:0)

你在尝试这样的事吗?

public static void main(String[] args) {
    double d = 0.1234;
    while(d>(long)d){
        d*=10;
    }
    System.out.println((long)d);
}