java 不确定整数有几位的情况下小数点前保留前两位数字不变后面全部为0怎么做,一直没弄出来
发布网友
发布时间:2022-06-03 04:58
我来回答
共3个回答
热心网友
时间:2023-10-11 23:37
原来 Math.log(1000) 不是3,这个 Math.log() 其实是 Math.ln(),它以e为底的对数,搞错了,原来我想 Math.log(1950) = 3.x 取整就是3,表示它后面有3个000,也就是先缩小1000倍取整后再放大1000倍。不过 JDK 1.5+ 提供了 Math.log10() 函数。
想来更简单的方法是直接用
BigDecimal.setScale(0, BigDecimal.ROUND_FLOOR).setScale(12);
先 Math.log10(input) 知道它有多少位 p,缩小 10^ (p-1) 倍得到前2位整数,抹掉小数位,再放大 10^ (p-1) 倍得到结果。
这个 ROUND_FLOOR 直接截尾数,再拉长到原来的精度。
如果想只留2个成为 09.12,那就得 new DecimalFormat("00.0000000000").format(input);
BigDecimal input = new BigDecimal("1234567890.123456789012");
int scale = input.scale();
BigDecimal power = new BigDecimal(String.valueOf(new BigDecimal(Math.log10(input.doubleValue())).intValue() - 1));
System.out.println("Input :" + input + ", scale :" + scale + ", Power : 10^" + power);
power = new BigDecimal("10").pow(power.intValue());
BigDecimal output = input.divide(power, 0, BigDecimal.ROUND_FLOOR);
System.out.println("Output :" + output.setScale(12).multiply(power));
System.out.println("Input :" + input + ", Output :" + input.setScale(2, BigDecimal.ROUND_FLOOR).setScale(input.scale()));
输出如下:
Input :1234567890.123456789012, scale :12, Power : 10^8
Output :1200000000.000000000000
Input :1234567890.123456789012, Output :1234567890.120000000000
热心网友
时间:2023-10-11 23:37
public static void main(String args[]){
java.util.Scanner sc=new java.util.Scanner(System.in);
System.out.println("please Enter an Integer:");
int n=sc.nextInt();
//接收输入的整数
String str=String.valueOf(n);
//把整数转化为字符串
StringBuilder sb=new StringBuilder(str);
for(int i=0;i<str.length();i++){
if(i<2){
sb.setCharAt(i, str.charAt(i));
continue;
}else sb.setCharAt(i, '0');
}
String s=sb.toString();
int e=Integer.valueOf(s);
System.out.println("输入的整数为:"+n+"\t保留前两位为:"+e);
}
热心网友
时间:2023-10-11 23:38
直接上程序
public class Test {
public static void main(String[] a) {
long num = 3242l;
int i = 1;
while (true) {
long tmp = (long)Math.pow(10, i);
long mod = num / tmp;
if (mod < 100) {
System.out.println(mod * tmp);
break;
}
i++;
}
}
}