这是一项简单的任务,但我无法自己解决..
我得到了
double digit1 = 12.1;
double digit2 = 12.99;
并需要一种方法给我这个:
anyMethod(digit1); //returns 10
anyMethod(digit2); //returns 99
我拥有的是
public static void getAfterComma(double digit) {
BigDecimal bd = new BigDecimal(( digit - Math.floor( digit )) * 100 );
bd = bd.setScale(4,RoundingMode.HALF_DOWN);
System.out.println(bd.toBigInteger()); // prints digit1=1 and digit2=99
}
无论如何我更喜欢整数作为返回类型.. 有人得到快速解决方案/提示吗?
麻烦
答案 0 :(得分:11)
为什么不简单地使用:
int anyMethod(double a){
//if the number has two digits after the decimal point.
return (int)((a + 0.001) * 100) % 100;
}
答案 1 :(得分:7)
获取double
的小数部分的一种简单方法是使用模运算符%
。但是,您必须考虑浮点运算不精确的事实。例如,
System.out.println(12.1 % 1); // outputs 0.09999999999999964
System.out.println(12.99 % 1); // outputs 0.9900000000000002
如果你想得到两个十进制数字作为int
,这是我认为你要问的,你可以实现这一点,掩盖浮点问题,如下:
System.out.println(Math.round((12.1 % 1) * 100)); // outputs 10
System.out.println(Math.round((12.99 % 1) * 100)); // outputs 99
但是,您应该考虑沿着您开始使用的BigDecimal
路径进一步向下,该路径使用任意精度算法。你可以这样做:
System.out.println(new BigDecimal("12.1").remainder(BigDecimal.ONE)); // outputs 0.1
System.out.println(new BigDecimal("12.99").remainder(BigDecimal.ONE)); // outputs 0.99
如果像以前一样,你想要两个十进制数字,你可以这样做:
System.out.println(new BigDecimal("12.1").remainder(BigDecimal.ONE).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP).intValue()); // outputs 0.1
System.out.println(new BigDecimal("12.99").remainder(BigDecimal.ONE).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP).intValue()); // outputs 0.99
请注意,最后两个方法与前两个方法之间存在一些差异:它们保留了参数的符号,因此如果您使用-12.99的最终示例,则会得到-99,并且它们会对待整数的小数部分为1,所以如果你使用12的最后一个例子,你将得到100个。
答案 2 :(得分:3)
没有必要一直使用Number
tyeps。您可以利用String
作为调解员。
String mediator = Double.valueOf(d1).toString();
mediator = mediator.substring(mediator.indexOf('.') + 1);
Integer result = Integer.valueOf(mediator);
答案 3 :(得分:1)
试试这个
public static void main(String args[]){
double a=12.99;
double b=12.1;
System.out.println(method(a));
System.out.println(method(b));
}
private static int method(double a) {
return (int) ((a*100)%100);
}
答案 4 :(得分:0)
如果我理解正确,您需要在给定n
个数字的点后面返回double
个数字。所以......让我们看看:
public int decimalDigits(double x, int n) {
double ans;
ans = (x - (int) x) * Math.pow(10, n);
return (int) ans;
}
完成。希望这会对你有所帮助。
对于您的具体示例,'n = 2'应该这样做。
答案 5 :(得分:0)
public static int anyMethod(double a){
return (int) (a*100)%100;
}
答案 6 :(得分:0)
看看这段代码在“。”之后返回数字。总是。除了双变量之外没有任何额外的参数。
public int anyMethod(double d)
{
String numString = d+"";
return Integer.parseInt(numString.substring(numString.indexOf('.')+1));
}