Math系列-CSDN博客
数值的表现形式
var y=123e5; // 12300000
var z=123e-5; // 0.00123
运算符
指数运算符
onsole.log(2**2);//2的2次方
多个指数运算符连用时,是从最右边开始计算的。
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2 // 512
let a = 1.5;
a **= 2;// 等同于 a = a * a;
let b = 4;
b **= 3;// 等同于 b = b * b * b;
方法
toString()
转换字符串
var myNumber=128;
myNumber.toString();
// 128 字符串类型
进制转换
var myNumber=128;
myNumber.toString(16); // 返回 80 16进制
myNumber.toString(8); // 返回 200 8进制
myNumber.toString(2); // 返回 10000000 2进制
(16777215).toString(16)==='ffffff'
toFixed()
保留小数
var a=123;
b=a.toFixed(2);
// b="123.00"
四舍五入
var num =2.446242342;
num = num.toFixed(2);
// 输出结果为 2.45
isInteger()
判断数值是否为整数
Number.isInteger(25) // true
Number.isInteger(25.1) // false
Number.isInteger(25.0) // true
Number.isInteger() // false
Number.isInteger(null) // false
Number.isInteger('15') // false
Number.isInteger(true) // false
parseInt
取整
parseInt(10.2) //=====>10
快捷
~~5.25 //5.0
~~2.3 //2
toPrecision
指定精度
123.toPrecision(2);
//"1.2e+2"
123 中,3会由于精度限制消失:
数值格式化
number.toLocaleString(locales, options)
locales属性
locales | 可选,格式化对象,可以是: ar-SA 阿拉伯 (沙特阿拉伯) bn-BD 孟加拉语(孟加拉国) bn-IN 孟加拉国(印度) cs-CZ 捷克语(捷克共和国) da-DK 丹麦语(丹麦) de-AT 奥地利德语 de-CH "瑞士"德语 de-DE 标准德语 el-GR 现代希腊语 en-AU 澳大利亚英语 en-CA 加拿大英语 en-GB 英式英语 en-IE 爱尔兰英语 en-IN 印度英语 en-NZ 新西兰英语 en-US 美国英语 en-ZA 英语(南非) es-AR 阿根廷 西班牙语 es-CL 智利 西班牙语 es-CO 哥伦比亚西班牙语 es-ES 卡斯蒂利亚西班牙语(在西班牙中北部使用) es-MX 墨西哥西班牙语 es-US 式西班牙语 fi-FI 芬兰语(芬兰) fr-BE 比利时法语 fr-CA 加拿大法语 fr-CH "瑞士"法语 fr-FR 标准法语(在法国) he-IL 希伯来语(以色列) hi-IN 印地语(印度) hu-HU 匈牙利语(匈牙利) id-ID 印度尼西亚语(印度尼西亚语) it-CH "瑞士"意大利语 it-IT 标准意大利语(在意大利使用) ja-JP 日语(日本) ko-KR 韩语(韩国) nl-BE 比利时荷兰语 nl-NL 标准荷兰语 no-NO 挪威语(挪威) pl-PL 波兰语(波兰) pt-BR 巴西葡萄牙语 pt-PT 欧洲葡萄牙语 ro-RO 罗马尼亚语(罗马尼亚) ru-RU 俄语(俄罗斯联邦) sk-SK 斯洛伐克语(斯洛伐克) sv-SE 瑞典语(瑞典) ta-IN 印度泰米尔语 ta-LK 斯里兰卡泰米尔语 th-TH 泰语(泰国) tr-TR 土耳其语(土耳其) zh-CN 中国大陆,简体字 zh-HK 香港地区,繁体字 zh-TW 台湾地区,繁体字 |
options属性
options | 可选,可以是:
|
style
- decimal 表示纯数字 默认值
- percent 示百分比格式
- currency 表示货币 注 对于设置style的值为currency时,需要配合currency属性的设置,如果单独使用会报错
const num = 2444222;
console.log(num.toLocaleString('zh', {style: 'decimal'}));
// 2,444,222
console.log(num.toLocaleString('zh', {style: 'percent'}));
// 244,422,200%
console.log(num.toLocaleString('zh', {style: 'currency'}));
// 报错 Uncaught TypeError: Currency code is required with currency style.
currency
只有在style的值是“currency”的时候才会生效
currency属性用来设置货币格式化中使用的货币符号
可能的值是ISO的货币代码 ,"CNY"是人民币,"USD" 表示美元,"EUR"表示欧元
const num = 2444222;
console.log(num.toLocaleString('zh', {style: 'currency', currency: 'CNY'}));
// ¥2,444,222.00
currencyDisplay
只有在style的值是“currency”的时候才会生效
currencyDisplay属性用来设置货币格式化中显式货币
可能值有:symbol表示使用本地化的货币名称,code使用国际标准组织货币代码, name表示使用本地化的货币名称。默认值是symbol。
const num = 2444222;
num.toLocaleString('zh', { style: 'currency', currency: 'cny', currencyDisplay: 'code' })
// CNY 2,444,222.00
num.toLocaleString('zh', { style: 'currency', currency: 'cny', currencyDisplay: 'name' })
// 2,444,222.00 人民币
useGrouping
分隔符
const num = 2333.3;
//如果不想有分隔符,可以指定useGrouping为false
num.toLocaleString('zh', { minimumIntegerDigits: 5, useGrouping: false })
//02333.3
num.toLocaleString('zh', { minimumFractionDigits: 2, useGrouping: false });
//2333.30
minimumIntegerDigits
用来指定使用的整数数字的最小数目.可能的值是从1到21,默认值是1。
意思是整数位置的位数
const num = 2333.3;
//如果不想有分隔符,可以指定useGrouping为false
num.toLocaleString('zh', { minimumIntegerDigits: 5, useGrouping: false });
//02333.3
minimumFractionDigits
用来指定使用的小数位数的最小数目.
可能的值是从0到20;默认为普通的数字和百分比格式为0。
const num = 2333.3;
//如果不想有分隔符,可以指定useGrouping为false
num.toLocaleString('zh', { minimumFractionDigits: 2, useGrouping: false });
//2333.30
maximumFractionDigits
用来指定使用的小数位数的最大数目。可能的值是从0到20。
const num2 = 666.666;
num2.toLocaleString('zh', { maximumFractionDigits: 2, useGrouping: false })
//666.67
minimumSignificantDigits
控制使用的有效数字的最小数目。可能的值是从1到21;默认值是1。
用来控制数字的有效数字的位数的。只要设置了这一组属性,上面那一组属性全部忽略不算
const num = 1234.5;
num.toLocaleString('zh', { minimumSignificantDigits: 6, useGrouping: false });
//1234.50
maximumSignificantDigits
控制使用的有效数字的最大数量。可能的值是从1到21;
用来控制数字的有效数字的位数的。只要设置了这一组属性,上面那一组属性全部忽略不算
const num = 1234.5;
num.toLocaleString('zh', { maximumSignificantDigits: 4, useGrouping: false });
//1235
实例
阿拉伯数字转成中文数字
//10以内
let num = 9
num.toLocaleString('zh-u-nu-hanidec') // "九"
//100以内
let transChinese = (num) => {
num = Number(num);
let upperCaseNumber = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'];
let length = String(num).length;
if (length == 1) {
return upperCaseNumber[num];
} else if (length == 2) {
if (num == 10) {
return upperCaseNumber[num];
} else if (num > 10 && num < 20) {
return '十' + upperCaseNumber[String(num).charAt(1)];
} else {
return upperCaseNumber[String(num).charAt(0)] + '十' + upperCaseNumber[String(num).charAt(1)].replace('零', '');
}
}
}
transChinese (99) // 九十九
1000000==>1,000,000
let num1 = 1000000;
let text1 = num1.toLocaleString();
//输出 1,000,000
// 使用特定的语言环境将数字格式化为字符串
let num2 = 1000000;
let text2 = num2.toLocaleString("fi-FI");
//输出 1 000 000
货币
let num = 1000000;
//人民币
num.toLocaleString("zh-CN", {style:"currency", currency:"CNY"});
//输出 ¥1,000,000.00
//美元
num.toLocaleString("en-US", {style:"currency", currency:"USD"});
//输出 $1,000,000.00
//欧元
num.toLocaleString("en-GB", {style:"currency", currency:"EUR"});
//输出 €1,000,000.00
//日元
num.toLocaleString("ja-JP", {style:"currency", currency:"JPY"});
//输出 ¥1,000,000
问题
小数0.1的加法
S中关于0.1+0.2 !==0.3 和0.1+0.7!==0.8的问题
在js中,0.1+0.2不会等于0.3,而是等于:
在js中,0.1+0.7不会等于0.8,而是等于:
JS中数字运算时,有一个叫做 数字运算中的精度缺失的问题
解决
方法一
最简单的就是先把0.1和0.2换成别的数字(因为在js中只有这两个数相加有bug,例如:1.1+1.2不会有问题),所以先让0.1和0.2分别乘以10,求和之后再除以10 ,则不会有问题:
(0.1*10+0.2*10)/10 ===0.3
方法二
可能很多小伙伴都忘记了js的Number对象有一个保留小数位数的方法:toFixed();传入一个需要保留的位数就OK:
parseFloat((0.1+0.2).toFixed(10)) ===0.3