【问题标题】:How to output the number 2.00 as a complete string?如何将数字 2.00 输出为完整的字符串?
【发布时间】:2013-08-08 12:42:19
【问题描述】:

在此之前,我想说声对不起。但这不是重复的。其他帖子的任何答案都有同样的问题。 JS 中没有浮点数或整数(只有数字)。当您创建isInt() 函数时,2.00 总是将true 检测为整数。我希望将 2.00 检测为浮点数。所以,我得先把它串起来。

function isInt(i) {
    if ( i.toFixed ) {
        if ( i % 1 === 0 ) {
            return true; // the problem is 2.00 always detected true as integer. 
            // i want 2.00 detected as float
        } else {
            return false;
        }
    } else {
        return false;
    }
}

然后我想我会将 2.00 字符串化,然后用 split('.') 拆分它。但是 toString 没有这样做

var i = 2.00;
alert(i.toString()); 
// Why this always result 2 . i want the character behind point

那么,该怎么做呢?我想要 2.00 结果 "2.00" ,而不仅仅是 "2"

感谢您的回答

【问题讨论】:

  • 2.00 === 2; // true,如果你想要 2.d.p.查看答案,如果您想要在文字中键入的小数位数,JavaScript 不在乎,会删除零
  • 在数值上,2.00 == 2。如果你没有明确地告诉它,JS 怎么知道你想要看起来像无用的 0 的东西?
  • javascript 中只存在一种数字:IEEE 754 双精度浮点数。 @NULL 有正确答案。
  • @SlametBedjo:简单的回答:你不能在 javascript 的范围内。 没有办法区分 22.0 2.00 甚至 2.0000000000000

标签: javascript floating-point


【解决方案1】:

您可以使用Number.toFixed(n);

var i = 2;

alert( i.toFixed(2) ); // "2.00"

var i = 1.2345;

alert( i.toFixed(2) ); // "1.23"

还要注意2 === 2.002 !== "2.00"

【讨论】:

  • .toFixed(2) 将数字 i 转换为一个字符串,告诉您需要两个小数点
  • @SlametBedjo .toFixed(2) 将返回一个字符串。 w3schools.com/jsref/jsref_tofixed.asp
  • 谢谢 :) 。是的,只有数字。但是.. 情况是,我们想将 2.00 检测为浮点数,而不是整数。我们创建函数 isInt,但是,2.00 true 作为 int,而不是 float
  • @SlametBedjo 请去阅读 JavaScript(w3schools.com/js/js_datatypes.asp),正如其他人所提到的,javascript 中没有整数或浮点数。只有数字。要检测数字是否有小数位,请在此处查看:stackoverflow.com/questions/3885817/…
  • @SlametBedjo 这不是 JavaScript 的工作方式,因为数字涵盖整数和浮点数,并且所有剩余的零将从数字 0.01 == 0.010 == 0.01000000000 中删除。您无法检测到数字是如何初始化的,例如var i = 2.00
【解决方案2】:

修改答案:

在 javascript 中,绝对没有办法区分 2 2.02.000。因此,如果不提供一些额外的小数位,您将永远能够在分配后从 var a = 2.00 检测到 2 不是 integer(根据您的方法)。 p>

尽管有 [误导性] 内置方法,但举个例子:

typeof parseInt('2.00', 10) == typeof parseFloat('2.00')
                   'number' == 'number'
                        /* true */

原答案:

JavaScript 没有基于硬的标量类型,只有一个 Number。出于这个原因,并且因为您实际上只有 1 个有效数字,JavaScript 将您的 2.00 设为“整数”[松散使用](因此不存在小数位)。到 JavaScript:2 = 2.0 = 2.00 = 2.00000)。

举个例子,如果我给你号码12.000000000000 并让你记住它并在一周后把它交给某人,你会花时间记住有多少个零,还是专注于这样一个事实我给了你号码12? (twelvetwelve with as many decimal places 更容易记住)

intfloat/double/real 而言,您实际上只是从您的角度描述数字的类型,而不是 JavaScript 的。想想在 JavaScript 中调用一个数字 int 是给它一个标签而不是一个定义。概述:

Value:     To JavaScript:    To Us:
------     --------------    ------
1          Number            integer
1.00       Number            decimal
1.23       Number            decimal

无论我们将其归类为什么,JavaScript 仍然只将其视为Number

如果您需要保留小数位,Number.toFixed(n) 将是您的最佳选择。

例如:

// only 1 sig-fig
var a = 2.00;
console.log(''+a);             // 2
console.log(a.toFixed(2));     // 2.00

// 3 sig-figs
var b = 2.01
console.log(''+b);            // 2.01
console.log(b.toFixed(2));    // 2.01

顺便说一句,在 var 前面加上 ''+ 与调用 .toString() 相同,只是简写。如果我使用a.toString()b.toString() 会产生同样的结果

【讨论】:

  • Javascript 只有一种数字数据类型,即数字。 toFixed 仅将其转换为具有所需小数位数的字符串。
  • 我并不是在暗示它有float v decimal vs real vs int;只是没有硬设置的数据类型。另外,你是对的:它会生成一个强制固定小数位数的字符串。
  • 感谢您的回答。大小写为 2.00 应检测为浮点数。当每个帖子创建 isInt() 时,2.00 总是 true 作为整数,而不是浮点数
  • @SlametBedjo:正如 Rob 所提到的,javascript 中没有 int,只是一个简单的 Numberint 更多的是一种确定而非标量类型)。并且 JavaScript 只存储它需要的内容(并且由于提供的两个小数位在说明数字 2 方面没有任何意义,因此它会丢弃它们)。
  • @BradChristie 我的错误,我误解了您所说的“基于硬”的意思。 Javascript 的变量确实是动态的,不是强类型的。
【解决方案3】:

要字符串化(Chrome 至少这样做)使用这个:

i.toPrecision(3)

这将显示 2 个十进制数字。

NULL 的解决方案也做得很好,无需计算精确的精度。即.toFixed(decimals) 是你最好的朋友

【讨论】:

  • @Powerslace .toPrecision 将返回一个字符串,其长度 = (length + dec float) 为数字 (12.34).toPrecision(3) === "12.3"
  • 进一步,它进入e符号1234..toPrecision(3); // 1.23e+3
【解决方案4】:

你不能完全按照自己的意愿去做。

2.00 在 JavaScript 中被转换为数字 2,没有小数点。如果您想使用 .toFixed(2) 将其重新添加,如上所示。

【讨论】:

  • 因为JS只知道它们是数字,案例是,如何将2.00检测为float,而不是int(当你创建isInt()函数时)
【解决方案5】:

我建议将“2.00”保留为字符串,并在必要时将其解析为数字以进行算术运算。这样您就可以区分数字 2 是输入为“2”、“2.00”还是“2.000000”。如果要保留原始小数位数,请输出字符串,而不是数字。

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    相关资源
    最近更新 更多