我有一个字符串12345.00,我希望它返回12345.0。

我看了一下trim,但它看起来只是在修剪空白和切片,我不知道这是如何工作的。有什么建议吗?


您可以使用substring函数:

让str=“12345.00”;str=str.substring(0,str.length-1);console.log(str);

这是公认的答案,但根据下面的对话,切片语法更加清晰:

让str=“12345.00”;str=str.slice(0,-1);console.log(str);


怎么样:

让myString=“12345.00”;console.log(myString.substring(0,myString.length-1));


对于像您这样的数字,我建议对子字符串执行以下操作:

console.log(parseFloat('12345.00').toFixed(1));

请注意,这实际上会将数字四舍五入,我认为这是需要的,但可能不是:

console.log(parseFloat('12345.46').toFixed(1));


如果要对浮点数进行通用舍入,而不是只修剪最后一个字符:

var float1 = 12345.00,
    float2 = 12345.4567,
    float3 = 12345.982;

var MoreMath = {
    /**
     * Rounds a value to the specified number of decimals
     * @param float value The value to be rounded
     * @param int nrDecimals The number of decimals to round value to
     * @return float value rounded to nrDecimals decimals
     */
    round: function (value, nrDecimals) {
        var x = nrDecimals > 0 ? 10 * parseInt(nrDecimals, 10) : 1;
        return Math.round(value * x) / x;
    }
}

MoreMath.round(float1, 1) => 12345.0
MoreMath.round(float2, 1) => 12345.5
MoreMath.round(float3, 1) => 12346.0

编辑:保罗指出,这似乎有一个内置函数。这种解决方案显然比我的干净得多。使用parseFloat后跟toFixed


你可以用切片!你只需要确保你知道如何使用它。正数是相对于开头的,负数是相对于结尾的。

js>"12345.00".slice(0,-1)
12345.0

@杰森S:你可以用切片!你只需要确保你知道如何使用它。正数与开始,负数是相对于末端。js>“12345.00”.切片(0,-1)12345

对不起,我的写手,但帖子早些时候被标记为“jquery”。因此,不能在jQuery中使用slice(),因为slice(()是jQuery方法,用于使用DOM元素的操作,而不是子字符串。。。换言之,回答@Jon Erickson提出了非常完美的解决方案。

然而,您的方法将在简单的Javascript中使用jQuery函数。需要指出的是,由于上次在评论中的讨论,jQuery是JS的可更新扩展,而不是他自己的父级最著名的ECMAScript。

这里还存在两种方法:

作为我们的:

string。substring(from,to)as plus if“to”index null返回字符串的其余部分。因此:string.substring(from)正或负。。。

而其他一些-substr()-提供子字符串的范围,“length”只能为正:string.substr(开始,长度)

还有一些维护人员建议,最后一个方法string.substr(start,length)不起作用,或者对MSIE有错误。


使用子字符串获取_bar左侧的所有内容。但首先必须在字符串中获取_bar的instr:

str.substring(3, 7);

3是起点,7是长度。


您可以使用JavaScript字符串对象的substring方法:

s = s.substring(0, s.length - 4)

它无条件地从字符串s中删除最后四个字符。

但是,如果要有条件地删除最后四个字符,则仅当它们完全是_bar时:

var re = /_bar$/;
s.replace(re, "");

if(str.substring(str.length - 4) == "_bar")
{
    str = str.substring(0, str.length - 4);
}

正则表达式是您要查找的:

让str=“foo_bar”;console.log(str.replace(/_bar$/,“”));


最简单的方法是使用字符串的切片方法,该方法允许负位置(对应于从字符串末尾的偏移):

const s = "your string";
const withoutLastFourChars = s.slice(0, -4);

如果需要更一般的方法来删除最后一个下划线之后的所有内容(包括),可以执行以下操作(只要确保s至少包含一个下划线):

consts=“your_string”;const withoutLastChunk=s.slice(0,s.lastIndexOf(“_”));console.log(不带LastChunk);


试试看:

<script>
    var x="foo_foo_foo_bar";
    for (var i=0; i<=x.length; i++) {
        if (x[i]=="_" && x[i+1]=="b") {
            break;
        }
        else {
            document.write(x[i]);
        }
    }
</script>

您也可以在http://jsfiddle.net/informativejavascript/F7WTn/87/.


1.(.*),多次捕获任何字符:

console.log(“字符串”.match(/(.*).$/)[1]);

2..,匹配最后一个字符,在这种情况下:

console.log(“字符串”.match(/(.*).$/));

3.$,匹配字符串的结尾:

console.log(“字符串”.match(/(.*).{2}$/)[1]);


试试看:

const myString=“Hello World!”;console.log(myString.slice(0,-1));


使用JavaScript的切片函数:

let string='foo_bar';string=string.spice(0,-4);//在此处切下最后四个字符console.log(字符串);

这可以用于删除任何长度字符串末尾的“_bar”。


debris = string.split("_") //explode string into array of strings indexed by "_"

debris.pop(); //pop last element off the array (which you didn't want)

result = debris.join("_"); //fuse the remainng items together like the sun

使用正则表达式:

设aStr=“12345.00”;aStr=aStr替换(/.$/,'');控制台日志(aStr);


https://stackoverflow.com/questions/34817546/javascript-how-to-delete-last-two-characters-in-a-string

如果不需要空间,只需使用修剪

"11.01 °C".slice(0,-2).trim()

如果要删除接近字符串末尾的内容(对于大小可变的字符串),可以将slice()和substr()组合起来。

我有一个动态构建的带有标记的字符串,其中有一个用逗号分隔的锚标记列表。字符串类似于:

var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";

要删除最后一个逗号,我执行了以下操作:

str = str.slice(0, -5) + str.substr(-4);

这里有一个我认为在其他答案中没有看到的替代方案,只是为了好玩。

var strArr=“您好,我是字符串”.split(“”);strArr.pop();document.write(strArr.join(“”));

不像切片或子字符串那样清晰或简单,但允许您使用一些不错的数组方法来处理字符串,因此值得了解。


表演

今天2020.05.13我在MacOs High Sierra v10.13.6上对Chrome v81.0、Safari v13.1和Firefox v76.0上选择的解决方案进行了测试。

结论

切片(0,-1)(D)是短字符串和长字符串的快速或最快解决方案,建议作为快速跨浏览器解决方案基于子字符串(C)和子字符串(E)的解决方案是快速的基于正则表达式(A,B)的解决方案是慢/中快的解决方案B、F和G对于长字符串来说很慢解决方案F对于短字符串最慢,对于长字符串最慢

细节

我对解决方案A、B、C、D、E(ext)、F、G(my)进行了两次测试

对于8个字符的短字符串(来自OP问题)-您可以在这里运行对于1M长的字符串-您可以在这里运行

解决方案在以下片段中介绍

函数A(str){return str.replace(/.$/,“”);}函数B(str){返回str.match(/(.*).$/)[1];}函数C(str){返回str.substring(0,str.length-1);}函数D(str){返回str.slice(0,-1);}函数E(str){返回str.substr(0,str.length-1);}函数F(str){设s=str.split(“”);s.pop();return s.join(“”);}函数G(str){让s=“”;对于(设i=0;i<str.length-1;i++)s+=str[i];返回s;}// ---------//测试// ---------let log=(f)=>console.log(`${f.name}:${f(“12345.00”)}`);[A,B,C,D,E,F,G].map(F=>log(F));此代码段仅显示源

以下是Chrome短字符串的示例结果


实际上,您可以使用arr.length=2删除数组的最后arr.length-2项,如果数组长度为5,则会删除最后3项。

遗憾的是,这不适用于字符串,但我们可以使用split()拆分字符串,然后在进行任何修改后使用join()连接字符串。

var str='字符串'String.prototype.removeLast=函数(n){var string=this.split(“”)string.length=字符串长度-n返回字符串join(“”)}console.log(str.removeLast(3))


通过切片(indexStart,indexEnd)方法-注意,这不会更改现有字符串,而是创建一个副本并更改副本。

console.clear();
let str = "12345.00";
let a = str.slice(0, str.length -1)
console.log(a, "<= a");
console.log(str, "<= str is NOT changed");

通过正则表达式方法-注意,这不会更改现有字符串,而是创建一个副本并更改副本。

console.clear();
let regExp = /.$/g
let b = str.replace(regExp,"")
console.log(b, "<= b");
console.log(str, "<= str is NOT changed");

通过array.splice()方法->这只适用于数组,它会改变现有的数组(所以要小心这个),您需要先将字符串转换为数组,然后再转换回来。

console.clear();
let str = "12345.00";
let strToArray = str.split("")
console.log(strToArray, "<= strToArray");
let spliceMethod = strToArray.splice(str.length-1, 1)
str = strToArray.join("")
console.log(str, "<= str is changed now");

尝试使用toFixed

const str = "12345.00";
return (+str).toFixed(1);