将字符串(如86.678,1.12517,0.61457)转换为数字并递增/递减最后3位数字
Converting strings like 86.678, 1.12517, 0.61457 to numbers and increment/decrement last 3 digits
我正试图找出一种方法来转换字符串,如86.678,1.12517,0.61457到数字,而不丢失任何小数点信息和数量的数字。
数字在本质上是不同的,但我需要一种方法来找出如何递增/递减最后2位数的每一个这样的数量30举个例子,如果我想增加86.678它将成为86.708我有困难了,每次都有不同数量的数字后.
但总有至少3个,还会有类似89.990哪里生长数量需要90.020新,同样适用于递减。
这是相当混乱和丑陋的,但对于格式良好的数据,它应该工作。
function incrementalize(value) {
return parseFloat(value) +
parseFloat(value.replace(/'d/g, 0).replace(/00$/, '30'));
}
这里的第一个正则表达式将所有内容都归零,因此123.4567
变成000.0000
,然后将后面的一对零交换,因此您得到000.0030
。
请注意,当添加带有分数值的数字时,会显示IEEE-754双精度数字固有的不精度。例如,你的0.61457 + 0.00030的例子。
生活例子:
test(86.678);
test(1.12517);
test(0.61457);
test(0.0123);
test(0.9999);
function incrementalize(value) {
return parseFloat(value) +
parseFloat(value.replace(/'d/g, 0).replace(/00$/, '30'));
}
function test(num) {
var newNum = incrementalize(String(num));
snippet.log(num + " => " + newNum);
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
更新:为了保持初始值的精度,使用sprintf-js库:
function incrementalize(value) {
return sprintf(
'%.' + value.split(/'./)[1].length + 'f',
parseFloat(value) +
parseFloat(value.replace(/'d/g, 0).replace(/00$/, '30'))
);
}
相关文章:
- 键入最后一位数字后自动提交
- 将数字四舍五入到小数点后两位
- 将数字四舍五入到小数点后两位,以设置货币格式
- 将数字四舍五入到两位小数
- RegExp匹配任意字符串+8位数字
- RegEx查找4位数字前后的逗号
- 如何使用 num.toString 和 str.split 查找整数的最后一位数字
- Regex表示10位数字,其中没有't允许所有零、所有单个no和序列号
- 简单的Javascript方式,在输入字段的每5位数字后添加一个空格
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- 将数字格式化为货币,两位小数
- 输入只允许6位数字,逗号分隔后,允许角js中的另外6位数字
- 如何创建和递增2或3位十六进制数字
- JavaScript 使用多少位来表示一个数字
- 如何显示正好 2 位数字的 html 数字输入的输入值
- 如何在HTML5 / javascript中查找十六进制值的特定位或数字
- JS Regex的最后两位数字与前两位数字匹配
- 递归地找到一个数字's位的和w/ RegEx和w/o Eval()
- c# .net中用户的字母数字8位唯一id
- node.js中有大数字的位运算符