【问题标题】:How can I prevent a string value from getting rounded when converted to a number value?如何防止字符串值在转换为数字值时四舍五入?
【发布时间】:2016-11-18 19:17:38
【问题描述】:

我有一个接受数值的输入字段。我想找到一种将该字符串值转换为数字值的方法。

ParseInt() 是首先找到的,然后是 toFixed()

这些有什么共同点?它将值四舍五入为其整数值(就像 ParseInt 建议的那样——我知道!)。

如何在保留任何十进制值的同时将字符串表示形式转换为数值?

例如:

"54.3" --> 54.3

【问题讨论】:

标签: javascript jquery string numbers


【解决方案1】:

整数是整数。

浮点数是带有十进制值的数字。

知道这一点后,您将需要使用parseFloat(),这将考虑到时间段;而不是parseInt(),它将四舍五入到最接近的整数。

更多详细信息请参考:these docs

所以答案是:

parseFloat("string");

你也可以这样做,这就是所谓的一元加:

let a = "54.3"

a = +a;

执行 +a 实际上与执行 a * 1 相同;如果需要,它会将a 中的值转换为数字,但之后不会更改值。

【讨论】:

  • 为什么不是显而易见的Number? parseFloat 更喜欢 radix 参数,而 + 只是一种 hacky 方式 Number("54.3")
  • 虽然这可以防止将 舍入为整数(这可能是提问者的意思),但我猜由于使用二进制浮点类型。使用双精度,实际值将接近54.299999999999997,并且像往常一样,相对误差在10 ** -16的数量级。
  • 这是一个很好的观点@Jeppe。四舍五入是计算机的一个缺陷,它导致了一些有趣的事件,例如 1991 年 2 月 25 日爱国者导弹故障。您的观点是在进行非常精确的计算时应该始终考虑的问题。
【解决方案2】:

你可以使用:

//pass String as argument
var floatVal = parseFloat("54.3");
console.log(floatVal);

【讨论】:

  • 或者直接使用a=>+a
【解决方案3】:

您甚至可以将Number 用作numeric strings to a number 的函数:

Number("54.3") // 54.3

注意以下几点:

  • parseFloat 应该从字符串中解析一个数值,如果字符串的开头(如果不是全部)是数字,则成功。

  • Number 构造函数或函数检查整个字符串是否为数字。

  • +"54.3"与幕后Number("54.3")一模一样。

【讨论】:

    【解决方案4】:

    您可以将输入字段转换为数字,也可以指定要保留多少个十进制值。

    因此,假设您使用两个十进制值进行计算,但用户输入“3.14151617”。您可以使用此方法转换输入并去掉多余的十进制值。

    var input = "3.14151617" var num = +(parseFloat(input).toFixed(2))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多