剃掉大数字的十进制 javascript
Shave off decimal of large numbers javascript
我试图制作一个函数来美化我的数字,这似乎很麻烦,例如 400 显示为 4H,这是正确的 430 显示为 4.3H 仍然可以接受,但 403 显示为 4.03H,这是不可接受的,这是我的代码不确定该怎么做才能修复它
编辑:随着数字变大,比如5003,它们将显示为5.003K我希望它显示5K编辑:随着数字变大,比如 5003,它们将显示为 5.003K,我希望它显示 5K基本上小数位不应该超过 2就像这里的列表
5000 -> 5K
5500 -> 5.5k
5050 -> 5.05k
5005 -> 5K
var ranges = [
{ divider: 1000000000000000000000000000000000 , suffix: 'Dec' },
{ divider: 1000000000000000000000000000000 , suffix: 'Non' },
{ divider: 1000000000000000000000000000 , suffix: 'Oct' },
{ divider: 1000000000000000000000000 , suffix: 'Sep' },
{ divider: 1000000000000000000000 , suffix: 'Sex' },
{ divider: 1000000000000000000 , suffix: 'Quin' },
{ divider: 1000000000000000 , suffix: 'Quad' },
{ divider: 1000000000000 , suffix: 'T' },
{ divider: 1000000000 , suffix: 'B' },
{ divider: 1000000 , suffix: 'M' },
{ divider: 1000 , suffix: 'K' },
{ divider: 100 , suffix: 'H' }
];
function INP(number, round) {
for (var i = 0; i < ranges.length; i++) {
if (number >= ranges[i].divider) {
if (round == null) {
return (number / ranges[i].divider) + ranges[i].suffix;
} else {
return (number / ranges[i].divider).toFixed(round) + ranges[i].suffix;
}
}
}
return number.toString();
}
.wrapper {
position: fixed;
top: 35%;
left: 35%;
}
<div class="wrapper">
<input type="number" id="num" placeholder="number">
<br>
<input type="number" id="rounded" placeholder="round">
<div id="output"></div>
</div>
<script>
var field = document.getElementById("num");
var div = document.getElementById("output");
field.onkeyup = function() {
var num = document.getElementById("num").value;
var rounded = document.getElementById("rounded").value;
if (rounded == true) {
var output = INP(num, true);
} else {
var output = INP(num);
}
div.innerHTML = "Output: " + output;
}
</script>
代码中存在一些错误
-
if (rounded == true)
数字字段的输入值永远不会变为true
,则始终为假。 -
INP(num, true)
你传递true
作为论点,与此无关。预期参数是根据您的代码的数字。 -
if (round == null)
也总是 false,如果第二个输入字段为空值,则为空字符串而不是 null,因此请将其更改为if (round == '')
var ranges = [{
divider: 1000000000000000000000000000000000,
suffix: 'Dec'
}, {
divider: 1000000000000000000000000000000,
suffix: 'Non'
}, {
divider: 1000000000000000000000000000,
suffix: 'Oct'
}, {
divider: 1000000000000000000000000,
suffix: 'Sep'
}, {
divider: 1000000000000000000000,
suffix: 'Sex'
}, {
divider: 1000000000000000000,
suffix: 'Quin'
}, {
divider: 1000000000000000,
suffix: 'Quad'
}, {
divider: 1000000000000,
suffix: 'T'
}, {
divider: 1000000000,
suffix: 'B'
}, {
divider: 1000000,
suffix: 'M'
}, {
divider: 1000,
suffix: 'K'
}, {
divider: 100,
suffix: 'H'
}];
function INP(number, round) {
for (var i = 0; i < ranges.length; i++) {
if (number >= ranges[i].divider) {
if (round == '') {
return (number / ranges[i].divider) + ranges[i].suffix;
} else {
var res = (number / ranges[i].divider).toFixed(round),
fr = res - parseInt(res, 10);
return (fr > 0 ? res : parseInt(res, 10)) + ranges[i].suffix;
}
}
}
return number.toString();
}
.wrapper {
position: fixed;
top: 35%;
left: 35%;
}
<div class="wrapper">
<input type="number" id="num" placeholder="number">
<br>
<input type="number" id="rounded" placeholder="round">
<div id="output"></div>
</div>
<script>
var field = document.getElementById("num");
var div = document.getElementById("output");
field.onkeyup = function() {
var num = document.getElementById("num").value;
var rounded = document.getElementById("rounded").value;
var output = INP(num, rounded);
div.innerHTML = "Output: " + output;
}
</script>
你有两个问题。
首先,if (rounded == true)
没有做你想做的事。 rounded
是一个字符串,将字符串与布尔值进行比较会将布尔值转换为字符串,从而导致字符串"1"
,因此等效于if (rounded == "1")
。您可以使用parseInt()
将输入转换为整数,然后使用 if (rounded)
。
其次,你没有将rounded
的值传递给INP
,而是传递true
。然后当它在toFixed()
使用它时,它转换为整数1
,所以它总是四舍五入到小数点后 1 位而不是 rounded
输入中的数字。
要去除 toFixed
结果上多余的尾随零,请调用 parseFloat()
将其转换回数字。
var ranges = [
{ divider: 1000000000000000000000000000000000 , suffix: 'Dec' },
{ divider: 1000000000000000000000000000000 , suffix: 'Non' },
{ divider: 1000000000000000000000000000 , suffix: 'Oct' },
{ divider: 1000000000000000000000000 , suffix: 'Sep' },
{ divider: 1000000000000000000000 , suffix: 'Sex' },
{ divider: 1000000000000000000 , suffix: 'Quin' },
{ divider: 1000000000000000 , suffix: 'Quad' },
{ divider: 1000000000000 , suffix: 'T' },
{ divider: 1000000000 , suffix: 'B' },
{ divider: 1000000 , suffix: 'M' },
{ divider: 1000 , suffix: 'K' },
{ divider: 100 , suffix: 'H' }
];
function INP(number, round) {
for (var i = 0; i < ranges.length; i++) {
if (number >= ranges[i].divider) {
if (round == null) {
return (number / ranges[i].divider) + ranges[i].suffix;
} else {
return parseFloat((number / ranges[i].divider).toFixed(round)) + ranges[i].suffix;
}
}
}
return number.toString();
}
var field = document.getElementById("num");
var div = document.getElementById("output");
field.onkeyup = function() {
var num = parseInt(document.getElementById("num").value, 10);
var rounded = parseInt(document.getElementById("rounded").value, 10);
if (rounded) {
var output = INP(num, rounded);
} else {
var output = INP(num);
}
div.innerHTML = "Output: " + output;
}
.wrapper {
position: fixed;
top: 35%;
left: 35%;
}
<div class="wrapper">
<input type="number" id="num" placeholder="number">
<br>
<input type="number" id="rounded" placeholder="round">
<div id="output"></div>
</div>
您可以计算对数为 10 的单位前缀。应用调整并使用它。
var ranges = { 33: 'Dec', 30: 'Non', 27: 'Oct', 24: 'Sep', 21: 'Sex', 18: 'Quin', 15: 'Quad', 12: 'T', 9: 'B', 6: 'M', 3: 'K', 2: 'H' };
function INP(number, round) {
var exp = Math.floor(Math.log(number) / Math.log(10));
while (exp > 3 && !ranges[exp]) {
exp--;
}
if (!ranges[exp]) {
return number.toString();
}
return round === '' ?
(number / Math.pow(10, exp)) + ranges[exp] :
(number / Math.pow(10, exp)).toFixed(round) + ranges[exp];
}
.wrapper {
position: fixed;
top: 35%;
left: 35%;
}
<div class="wrapper">
<input type="number" id="num" placeholder="number">
<br>
<input type="number" id="rounded" placeholder="round">
<div id="output"></div>
</div>
<script>
var field = document.getElementById("num");
var div = document.getElementById("output");
field.onkeyup = function() {
var num = document.getElementById("num").value;
var rounded = document.getElementById("rounded").value;
var output = INP(num, rounded);
div.innerHTML = "Output: " + output;
}
</script>
相关文章:
- 在Javascript和PHP中,十进制到RGB
- 在javascript中接受十进制数字的Regex
- 如何使用javascript验证在表单输入中避免负值、浮点值和十进制值
- JavaScript basis 是 math.pow 函数中的十进制数
- 如何使用 JavaScript 自动设置十进制值
- Javascript - 具有非线性刻度的负十进制输入范围
- 如何使用 javascript 将浮点数格式化为十进制数(7)
- 循环 += 十进制变量的 javascript 有问题
- 有人可以详细解释这个 JavaScript 十进制舍入函数吗?
- Javascript:我怎么能强迫一个有十进制值的字符串使用点而不是逗号呢
- 无需Javascript内置函数即可将十进制转换为十六进制
- 使用javascript的十进制验证未按预期工作
- 在javascript中验证十进制
- 如何在javascript中输入十进制数
- 编译为JavaScript选项,该选项使用十进制库而不是IEEE 754数学
- 更改正则表达式以查找十进制Javascript
- 将变量舍入为1个十进制javascript
- 二进制到十进制Javascript
- 检查十进制(javascript)
- 剃掉大数字的十进制 javascript