JavaScript - 以所有可能的方式在字符串中截断数字

时间:2014-05-25 18:48:21

标签: javascript regex string

我想要一个函数来截断String中一个数字的所有零,一个String可以大于JavaScript的浮点数,这意味着parseFloat 不是一个选项。

当我定义truncate时,我的意思是删除所有可能不必要的零并添加所有可能的必要零,并且还要处理十进制情况,例如:

01 -> 1
.04 -> 0.04
.30 -> 0.3
10 -> 10
0.0 -> 0
23. -> 23
00 -> 0
24.560 -> 24.56

我非常喜欢RegExp,有多个替换版以便于理解。

你的答案之后

5 个答案:

答案 0 :(得分:4)

只需将其强制转换为带加号的数字,因为您真正想要的是在javascript中将字符串转换为有效数字

+"00.020" // 0.02

+"02.032010" // 2.03201

或使用parseFloatNumber()或执行相同操作的任何其他方法

FIDDLE

答案 1 :(得分:1)

正则表达式解决方案:

(0+str).replace(/^0+(?=\d)|\.0*$|(\.\d*?)0+$/g, '$1');

基本上,我们在开头添加一个零以避免尾随点,然后我们删除零:

  • ^0+(?=\d)在开头删除了零。
  • \.0*$删除一个点,后跟零,直到结束。
  • (\.\d*?)0+$只有在点之后才会删除零。

答案 2 :(得分:0)

只需使用parseFloat

即可
> parseFloat("02.032010")
2.03201
> parseFloat("00.020")
0.02
> 

答案 3 :(得分:-1)

myDecimalString.replace(/(?:(\.\d+?)0+|\.0*)([Ee][+\-]?\d+)?$/, '$1$2')

应该假设一个大致匹配JavaScript's numerical literal format的字符串。

(\.\d*?)0+$1中捕获任何小数点和任何不参与尾随零的数字运行。

|\.0*处理有小数后跟但没有数字的情况。

([Ee]...)捕获组$2中的任何指数。

替换$1$2保留了分数的有用部分,后跟任何指数。

留下.0截断为空字符串的情况。我们可以通过另一个替换来解决这个问题,并很好地格式化".5"之类的输入:

.replace(/^([+\-])?([.eE]|$)/, '$010$02')

使用$01来保留任何起始符号,使用$02来保留整数组件之后发生的任何内容,而在没有整数部分时插入0


var strs = ['10', '10.0', '0.5', '0.50',  '0.500', '1.0e6', '123', '.7', '.2', '.0'];
function trunc(myDecimalString) {
  return myDecimalString
      .replace(
          /(?:(\.\d+?)0+|\.0*)([Ee][+\-]?\d+)?$/, '$1$2')
      .replace(/^([+\-])?([.eE]|$)/, '$010$02');
}
for (var i = 0; i < strs.length; ++i) {
  console.log('%s -> %s', strs[i], trunc(strs[i]));
}

演示了它的行动和日志:

10 -> 10
10.0 -> 10
0.5 -> 0.5
0.50 -> 0.5
0.500 -> 0.5
1.0e6 -> 1e6
123 -> 123
.7 -> 0.7 
.2 -> 0.2
.0 -> 0

买者

对于非机器生成的数字,这将失败,其中.用于1.000.000,如{{1}}为100万。

答案 4 :(得分:-1)

var a = parseInt("00.020" , 10);

从这里开始:http://www.w3schools.com/jsref/jsref_parseint.asp