java 不确定整数有几位的情况下小数点前保留前两位数字不变后面全部为0怎么做,一直没弄出来

比如123456,变成120000... 比如123456,变成120000 展开
 我来答
jamxval
2013-11-06 · TA获得超过6823个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1442万
展开全部

原来 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
Stale331x
2013-11-05 · TA获得超过1299个赞
知道小有建树答主
回答量:1276
采纳率:33%
帮助的人:837万
展开全部
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);
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友97530805f
2013-11-05 · TA获得超过253个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:131万
展开全部
直接上程序
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++;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式