科学计数法

PTA(Basic Level)1024.科学计数法

随声附和 提交于 2019-12-01 13:26:03
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9] . [0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数 A ,请编写程序按普通数字表示法输出 A ,并保证所有有效位都被保留。 输入格式: 每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A 。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。 输出格式: 对每个测试用例,在一行中按普通数字表示法输出 A ,并保证所有有效位都被保留,包括末尾的 0。 输入样例 1: +1.23400E-03 输出样例 1: 0.00123400 输入样例 2: -1.2E+10 输出样例 2: -12000000000 思路 字符串处理的问题,重点是存储好 E 前的数字,还有就是要定好指数的大小 一个容易错的点是指数比较小的时候,小数点是不能忽略的,要计算好关系在适当的时候输出小数点,距离 +1.23E+00 ,此时的输出应该为 1.23 ,如果一律按照指数比较大来处理,会有一个测试点 TLE 的 代码 #include<bits/stdc++.h> using namespace std; char a[10100]; int main() {

科学计数法转字符串

心不动则不痛 提交于 2019-12-01 09:40:36
科学计数法转字符串 20191014 有时需要将表里的 int, double, float 转为 string 类型的(主要的是 int ),但有时 int 在hive里是用 科学计数法来 表示的,不能直接转 string .参考文章 【链接】 . 对于 int 类型,可以直接先转为 bigint 再转为string cast(cast(intnum bigint) as string) 对于一般类型可用下面的语句(不是我写的0-0,但可以顺便学习了下hive里的 正则表达式 ,记录一下) --处理非科学计数法表示的字符串 --变量 :${hivevar:bignum} select case --处理非科学计数法表示的字符串 when length(regexp_extract('${hivevar:bignum}','([0-9]+\\.)([0-9]+)(E-*[0-9]+)',2)) = 0 then '${hivevar:bignum}' --处理整数 when length(regexp_extract('${hivevar:bignum}','([0-9]+\\.)([0-9]+)(E[0-9]+)',2)) <= cast(regexp_extract('${hivevar:bignum}','(E)([0-9]+)',2) as int) then rpad

hive科学计数法引发的问题

主宰稳场 提交于 2019-12-01 09:40:35
hive科学计数法引发的问题 20191011 (1) 20191010 hive 中 数值类型 和字符串类型 string 运算 hive中 数值类型 可以和和字符串类型 string 运算,其中字符串为 纯数字类型 ,都转为了浮点类型 double .若字符串不为 纯数字类型 ,计算结果则为 NULL . select 3 * '2' 6.0 select 3 * '2.2' 6.6 select '3' * '2' 6.0 (2) 20191010 hive中使用联结 union all union all 中的子查询要求 相同的列数 ,对应字段 类型相同 或可以 隐式转化为同一种类型 (3) 20191010 hive中 int double float 转 string 出现科学计数法 hive中 int , float , double 这些数值类型在存储 大额度数字 时,在前端展现上总是使用 科学计数法 来表示,其实无论是普通的表示方式还是科学计数法表示,只是一个习惯问题,结果都是一样的。 可是不能理解的是当把 数值类型 转化成 字符串类型 以后hive竟然把数值转换成了 科学计数法表示的字符串 而非 数值本身的字符串 处理方法参考下面链接, 整数 直接先转成 bigint ,若是 小数 需要特殊处理 参考1-hive中科学计数法 【坑】若是(1)-(3)正好同时出现

hive数字处理

一曲冷凌霜 提交于 2019-11-30 02:58:09
在hive中,两个字段做除法,如何取得想要的小数位数。 如果非科学计数法,比如1/3,没有0,所有就不会存在科学计数法,所以如果想要取多少位,直接round(1/3,2)即可。 如果是科学计数法,比如9/1000000001,结果中0比较多,就会存在科学计数法,这时round(9/10000000001,3)肯定是0,因为只取3位小数,四舍五入还是0,只有当你取更多位的小数时,才有可能不会四舍五入。还有有些数字即使你写了round(1/3,2)*100,按道理是整数,但是求出来的结构有可能就是带有小数的,这个地方很不解。 一个比较明确的位数输出结果是如下结构:cast((1-t1.bad_num/t1.all_num) as decimal(10,4))*10000,这样的一定就是整数了,而且强制转换成decimal后,数据也会进行四舍五入。 来源: oschina 链接: https://my.oschina.net/u/2260928/blog/807649

js处理科学计数法

白昼怎懂夜的黑 提交于 2019-11-29 18:22:45
本文转载至: 原文链接 function toolNumber(num_str) { num_str = num_str.toString(); if (num_str.indexOf("+") != -1) { num_str = num_str.replace("+", ""); } if (num_str.indexOf("E") != -1 || num_str.indexOf("e") != -1) { var resValue = "", power = "", result = null, dotIndex = 0, resArr = [], sym = ""; var numStr = num_str.toString(); if (numStr[0] == "-") { //如果为负数,转成正数处理,先去掉‘-’号,并保存‘-’. numStr = numStr.substr(1); sym = "-"; } if (numStr.indexOf("E") != -1 || numStr.indexOf("e") != -1) { var regExp = new RegExp( "^(((\\d+.?\\d+)|(\\d+))[Ee]{1}((-(\\d+))|(\\d+)))$", "ig" ); result = regExp.exec(numStr);

科学计数法转发成浮点数表示

[亡魂溺海] 提交于 2019-11-28 07:35:23
private Double scientDouble; public Double getScientDouble() { return scientDouble; } public void setScientDouble(Double scientDouble) { this.scientDouble = scientDouble; } /** * @description:给Double类型赋值过大,或者过小时产生科学计数法. * 把科学计数法转换成浮点数表示 * @author: * @date: 2019/8/21 * @param null: * @return: */ public static String scientificCountToFloat(Double scientStr){ System.out.println(scientStr); String str[]=scientStr.toString().split("-"); for (int i = 0; i <str.length ; i++) { System.out.println(str[i]); } NumberFormat nf = NumberFormat.getInstance(); //设置小数位数,通过算出科学计数法的小数位数,然后设置小数位数 if (str.length>1

java 禁用科学计数法

烈酒焚心 提交于 2019-11-27 13:31:47
禁用科学计数法 Double num = 80000000000.000001; System.out.println("默认计数法:num=" + num); NumberFormat nf = NumberFormat.getInstance(); nf.setGroupingUsed(false);// 不用科学计数 System.out.println("禁用科学计数法:num=" + nf.format(num)); 来源: https://www.cnblogs.com/zhzhlong/p/11365836.html

PAT乙级科学计数法 (20)

别等时光非礼了梦想. 提交于 2019-11-27 03:29:07
1014 科学计数法 (20) 题目描述 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[±][1-9]"."[0-9]+E[±][0-9]+,即数字的整数部分 只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。 输入描述: 每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。 输出描述: 对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。 输入例子: +1.23400E-03 输出例子: 0.00123400 这题写的时候在网上搜了搜,这个输入是看到的一位大佬写的,没想到还能怎么写,佩服! 下面是我的代码: #include<stdio.h> int main() { char a[10000]={0},b,f; int i,c; scanf("%c%c.%[0-9]E%d",&f,&a[0],a+1,&c); if(f==’-’) printf("-"); if(c<0) { for(i=0;i<-c;i++) { printf(“0”); if(i== 0) printf("."); } printf("%s"