只针对C语言中定义
浮点数
定义: 浮点数是指一个数的小数点的位置不是固定的,而可以浮动。实数的指数形式称为浮点数.
百科
浮点型数据是用来表示具有小数点的实数的. 在C语言中, 实数是以指数形式存放在存储单元中的 .
易错点
- 小数点前或后缺少数字的,也是合法浮点数. 比如:
0.0
、.0
、0.
- 但是前后都缺了,只有一个
.
, 不是合法的浮点数. - 指数形式写作小写
e
与大写E
都合法.不区分大小写. e
之前和之后必须有数字(不限制正负), 比如12e
,e12
不合法.,但是12e0
合法.- 且
e
之后的数字必须为整数. 比如:12e3.14
不合法 1000.0
与1e3
都是合法的浮点数 .3.e-0
,.3e0
都是合法的- 但是
2e.4
,2e-4.
不合法
输入自动判断是否合法
来自LeetCode第65题: https://leetcode.cn/problems/valid-number/
public boolean isNumber1(String s) {
// 直接正则表达式
return s.matches("^[+-]?((\\d+)|(\\d+\\.\\d*)|(\\d*\\.\\d+))([eE][+-]?\\d+)?$");
}
或者
List<Character> PlusMinus = new ArrayList<>(Arrays.asList('+', '-'));
public boolean isNumber(String s) {
// 1. 纯数字
if (isPureNumber(s)) return true;
// 2. 小数点
if (isDecimalPoint(s)) return true;
// 3. e/E
if (isScientificCM(s)) return true;
return false;
}
/**
* 判断是否可直接转为数字, 即是否全部为数字
*
* @param s
* @return
*/
boolean isPureNumber(String s) {
if (PlusMinus.indexOf(s.charAt(0)) != -1) {
s = s.substring(1);
}
boolean haveNum = false;
for (char c : s.toCharArray()) {
if (!Character.isDigit(c)) {
return false;
} else {
haveNum = true;
}
}
return haveNum;
/* 超界会返回false ,eg:016912630333
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
return false;
}*/
}
/**
* 是否合法带小数点
*
* @param s
* @return
*/
boolean isDecimalPoint(String s) {
if (PlusMinus.indexOf(s.charAt(0)) != -1) {
s = s.substring(1);
}
int count = 0;
boolean haveNum = false;
for (char c : s.toCharArray()) {
if (c == '.') {
if (++count > 1) return false;
} else if (!Character.isDigit(c)) {
return false;
} else {
haveNum = true;
}
}
return haveNum;
}
boolean isScientificCM(String s) {
s = s.toUpperCase();
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'E') {
if (++count > 1 || i == 0 || i == s.length() - 1) return false;
} else if (!Character.isDigit(s.charAt(i))
&& s.charAt(i) != '.'
&& PlusMinus.indexOf(s.charAt(i)) == -1) {
return false;
}
}
// 如果没有E
if (count == 0) return false;
String[] es = s.split("E");
// 第一部分是否合法
boolean part1 = isPureNumber(es[0]) || isDecimalPoint(es[0]);
// 第二部分是否合法
boolean part2 = isPureNumber(es[1]);
return part1 && part2;
}
转义字符
百科:
- 必须必须带有转义符反斜杠
\
- 只有一个反斜杠的
\
不合法 - 在
\1011
中1011是八进制形式, 不是二进制,不是十进制,换算后十进制为 521 , 已超出ASCLL码最大值128 , 不合法 - 在
\xf
, 以x开头表示以十六进制表示的,转换为十进制为 15. 合法 . \abc
,\}
,\\0
待定, 编译器不报错,但是会警告. 个人觉得不合法.也有认为\abc
合法的.(表示先响铃(\a),再是字符bc)- 注意:
\f
与\xf
都合法. - 但是
\n
合法,\xn
不合法,因为十六进制最大值为f
,即15
八进制/十六进制
- 八进制以0开头标志,比如:
012
,表示八进制数12
, 也可表示为000012
- 十六进制以
0x
或0X
开头标识, 比如:0xab
,但是不可表示为000000xab
- 十六进制不区分大小写,
0xab
也可表示为0XAB
0x5e2
属于合法十六进制数.但是只有一个0x
不合法.
字符常量
- 所有字符均以单引号
' '
包裹, 所有以双引号" "
包裹的都是字符串.
脑壳大…