Java-科学计数法 (20)

本文介绍了一个Java程序,该程序能够将科学计数法表示的实数转换为普通数字表示法,同时保留所有有效数字,包括末尾的0。程序详细解析了如何读取输入、处理符号、移动小数点以及最终输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分

只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。


现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。

输入描述:

每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。


输出描述:

对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。

输入例子:

+1.23400E-03

输出例子:

0.00123400
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		//读取科学计数法表示的数并存入字符串中
		String string = in.next();
		in.close();
		//判断数值正负号
		char sign1 = string.charAt(0);
		int index = string.indexOf("E");
		//判断指数正负号
		char sign2 = string.charAt(index+1);
		//截取小数部分与指数部分
		String decimal = string.substring(1, index);
		int exponent = Integer.parseInt(string.substring(index+2));
		//为方便对小数进行插入删除操作,转换成StringBuffer
		StringBuffer stringBuffer = new StringBuffer(decimal);
		//指数为正,小数点向右移
		if (sign2 == '+') {
			//用于存储小数部分的位数
			int len = stringBuffer.length() - 2;
			//移动位数(即指数)不超过原小数部分的位数
			if ( exponent > len ) {
				//删除小数点
				stringBuffer.deleteCharAt(1);
				//往后补0
				while((exponent-len) > 0){
					stringBuffer.append('0');
					exponent--;
				}
			}else {
				//移动位数小于小数部分位数,在相应地方插入小数点
				stringBuffer.deleteCharAt(1);
				stringBuffer.insert(exponent+1, '.');
			}
		}else if (sign2 == '-') {
			//如果指数为负,则小数前面补0
			stringBuffer.deleteCharAt(1);
			//删除小数点之后,在原小数前面补指数位个0
			while(exponent > 0){
				stringBuffer.insert(0, '0');
				exponent--;
			}
			stringBuffer.insert(1, '.');
		}
		if (sign1 == '-') {
			System.out.print(sign1);
		}
		System.out.println(stringBuffer);
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值