Javascript 如何在第二个分界点切割数字?

Javascript 如何在第二个分界点切割数字?,javascript,Javascript,我有个问题 我的后端从前端接收数字字符串 重要的一点是,我想在第二个分界点上减少数值 ex1)“2.346”=>2.34 ex2)“2.3”=>2.3 ex3)“4.246”=>4.24 ex4)“4.1”=>4.1 当我用'2.346'或'4.246'尝试这段代码时 let v = '2.346' v = parseInt(v * 100) / 100 console.log(v) // v = 2.34 但当我在2.3或4.1中尝试这段代码时,它会使wierd let v = '2.3

我有个问题

我的后端从前端接收数字字符串

重要的一点是,我想在第二个分界点上减少数值

ex1)“2.346”=>2.34

ex2)“2.3”=>2.3

ex3)“4.246”=>4.24

ex4)“4.1”=>4.1

当我用'2.346'或'4.246'尝试这段代码时

let v = '2.346'

v = parseInt(v * 100) / 100

console.log(v)
// v = 2.34
但当我在2.3或4.1中尝试这段代码时,它会使wierd

let v = '2.3'

v = parseInt(v * 100) / 100

console.log(v)
// v = 2.29

我的代码中有什么问题…?

浮点精度意味着,与您的
parseInt(v*100)/100相同的数字相乘,然后相除,有时可能会有开头不存在的长尾随数字

如果我是你,我会使用正则表达式来匹配a
后最多两位数字:

const clean=str=>str.match(/\d+(?:\。\d{1,2})/)[0];
控制台日志(干净('2.346'));

控制台日志(干净('2.3'))
浮点精度意味着,与您的
parseInt(v*100)/100一样,先乘后除同一个数字,有时可能会有开头不存在的长尾随不重要的数字

如果我是你,我会使用正则表达式来匹配a
后最多两位数字:

const clean=str=>str.match(/\d+(?:\。\d{1,2})/)[0];
控制台日志(干净('2.346'));
控制台日志(干净('2.3'))
函数tofixed(str){
返回parseInt(str*1000/10)/100
}
console.log(tofixed(“2.346”))
控制台日志(tofixed(“2.3”))
console.log(tofixed(“4.246”))
console.log(tofixed(“4.1”))
函数tofixed(str){ 返回parseInt(str*1000/10)/100 } console.log(tofixed(“2.346”)) 控制台日志(tofixed(“2.3”)) console.log(tofixed(“4.246”))
log(tofixed(“4.1”)
浮点数没有无限精度这一事实使您成为受害者。实际上,您不能将某些数字表示为浮点数。您是浮点数没有无限精度这一事实的受害者。实际上,您不能将某些数字表示为浮点数。有趣的是,为什么是regex而不是JS提供的API?
toFixed
rounds,但OP不希望舍入。另外,OP是以字符串开始的,而不是以数字开始的,我喜欢在合适的时候使用正则表达式,所以这似乎是一种合理的方法。明白了。没有领会到关于四舍五入的推论。谢谢。很有意思-为什么是regex而不是JS提供的API?
toFixed
rounds,但OP不想舍入。另外,OP是以字符串开始的,而不是以数字开始的,我喜欢在合适的时候使用正则表达式,所以这似乎是一种合理的方法。明白了。没有领会到关于四舍五入的推论。谢谢。请您添加一个说明,说明为什么它不同于
parseInt(v*100)/100
?@adiga
“2.3”*100=229.99999999997
,请参见
“2.3”*1000/10=230
仅供参考。这将以非常大的数量失败。例如,我知道
tofixed('53219247129812312132.453')
@javadsharati。关于
parseInt(str*1000/10)/100
如何解决
parseInt(str*100)/100
无法解决的问题?虽然代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的附加上下文可提高其长期价值。@adiga
parseInt(str*1000/10)/100
==
parseInt((str*1000)/10)/100
@谢谢
str.match(/\d+(?:\。\d{1,2})/)[0]
是最佳结果请您添加一个说明,说明为什么它不同于parseInt(v*100)/100
?@adiga
“2.3”*100=229.999999999 7
,请参见
“2.3”*1000/10=230
,仅供参考。这将以非常大的数量失败。例如,我知道
tofixed('53219247129812312132.453')
@javadsharati。关于
parseInt(str*1000/10)/100
如何解决
parseInt(str*100)/100
无法解决的问题?虽然代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的附加上下文可提高其长期价值。@adiga
parseInt(str*1000/10)/100
==
parseInt((str*1000)/10)/100
@谢谢
str.match(/\d+(?:\。\d{1,2})/)[0]
是最佳结果