function returnFloat(num) {
num = num.toString(); // 转成字符串类型 如能确定类型 这步可省去
if (num.indexOf(".") !== -1) {
let [integerPart, decimalPart] = num.split(".");
if (decimalPart.length > 2) {
decimalPart = decimalPart.substring(0, 2);
} else if (decimalPart.length === 1) {
decimalPart += "0";
}
//decimalPart = decimalPart.length > 2 ? decimalPart.substring(0, 2) : decimalPart.padEnd(2, '0'); 此处正则表达式有问题 会过滤掉长度为0的状态
num = `${integerPart}.${decimalPart}`;
} else {
num += ".00";
}
return num;
}
这段代码定义了一个名为 returnFloat
的函数,它接受一个参数 num
(可能是一个数字、字符串或其他可转换为字符串的类型),并返回一个格式化为两位小数的字符串。现在我将逐步解释这段代码:
-
转换为字符串:
javascript复制代码
num = num.toString(); |
这行代码将 num
转换为字符串。如果 num
已经是字符串,这一步是多余的,但如果不确定 num
的类型,这是一个安全的做法。
2. 检查是否包含小数点:
javascript复制代码
if (num.indexOf(".") !== -1) { |
这行代码检查字符串 num
是否包含小数点。如果包含,则执行以下操作。
3. 分割整数部分和小数部分:
javascript复制代码
let [integerPart, decimalPart] = num.split("."); |
使用 split(".")
将字符串按小数点分割,并将结果赋值给 integerPart
(整数部分)和 decimalPart
(小数部分)。
4. 处理小数部分的长度:
复制代码
* 如果小数部分的长度大于2,则只保留前两位。 | |
```javascript | |
if (decimalPart.length > 2) { | |
decimalPart = decimalPart.substring(0, 2); | |
} | |
``` | |
* 如果小数部分的长度等于1,则在其后添加一个0,以确保它总是两位。 | |
```javascript | |
else if (decimalPart.length === 1) { | |
decimalPart += "0"; | |
} | |
``` | |
注意:原始代码中有一个被注释掉的行,该行代码试图使用正则表达式或 `String.prototype.padEnd` 方法来处理小数部分的长度,但由于某些原因(可能是逻辑错误或代码冗余)被注释掉了。 |
5. 重新组合数字和字符串:
javascript复制代码
num = `${integerPart}.${decimalPart}`; |
使用模板字符串将整数部分和小数部分重新组合为一个字符串。
6. 如果原始数字没有小数点:
javascript复制代码
} else { | |
num += ".00"; | |
} |
如果原始字符串 num
不包含小数点,则在其后添加 ".00"。
7. 返回结果:
javascript复制代码
return num; |
最后,函数返回格式化后的字符串。
注意:虽然函数名为 returnFloat
,但它实际上并不返回浮点数(number
类型),而是返回一个字符串。如果你想返回一个真正的浮点数,你需要在返回前使用 parseFloat
或 Number
函数进行转换。但是,由于你正在处理格式化为两位小数的需求,字符串可能是更合适的返回类型。
当然,我会分别解释 toString()
, indexOf()
, split()
, 和 substring()
这些方法的用法。
- toString()
toString()
是 JavaScript 中大多数对象的一个方法,用于将对象转换为字符串。对于数字(Number
)、布尔值(Boolean
)、数组(Array
)等内置类型,它都会返回相应的字符串表示。
例如:
javascript复制代码
let num = 123; | |
let str = num.toString(); // str 现在是 "123" | |
let bool = true; | |
str = bool.toString(); // str 现在是 "true" | |
let arr = [1, 2, 3]; | |
str = arr.toString(); // str 现在是 "1,2,3" |
注意:对于 null
和 undefined
,直接调用 toString()
会抛出错误,因为它们没有这个方法。
- indexOf()
indexOf()
是字符串(String
)对象的一个方法,用于查找一个字符串在另一个字符串中首次出现的位置。如果找到,它会返回该位置的索引(从0开始);如果没有找到,它会返回 -1。
例如:
javascript复制代码
let str = "Hello, World!"; | |
let index = str.indexOf("World"); // index 现在是 7 | |
index = str.indexOf("JavaScript"); // index 现在是 -1,因为字符串中不包含 "JavaScript" |
indexOf()
还可以接受一个可选的第二个参数,表示从哪个索引位置开始搜索。
- split()
split()
是字符串(String
)对象的一个方法,用于将字符串分割成子字符串数组,并返回这个数组。分割是基于指定的分隔符(或正则表达式)进行的。
例如:
javascript复制代码
let str = "apple,banana,orange"; | |
let arr = str.split(","); // arr 现在是 ["apple", "banana", "orange"] | |
str = "one:two:three:four"; | |
arr = str.split(":"); // arr 现在是 ["one", "two", "three", "four"] |
split()
方法也可以接受一个可选的第二个参数,表示返回的数组的最大长度。
- substring()
substring()
是字符串(String
)对象的一个方法,用于提取字符串中介于两个指定下标之间的字符。返回的子字符串包括开始处的字符,但不包括结束处的字符。
例如:
javascript复制代码
let str = "Hello, World!"; | |
let sub = str.substring(0, 5); // sub 现在是 "Hello" | |
sub = str.substring(7); // sub 现在是 "World!",因为当只有一个参数时,substring() 会提取从开始索引到字符串末尾的所有字符 |
注意:与 slice()
方法类似,但 substring()
不接受负索引,且总是将较小的索引值作为起始点,较大的索引值作为结束点(如果两者被颠倒)。这与 slice()
的行为有所不同。