在JavaScript中使用小数而不是电子符号打印浮点值

在JavaScript中使用小数而不是电子符号打印浮点值,javascript,Javascript,当我在JavaScript中打印像0.0000001这样的浮点时 1e-7 我怎样才能避免这种情况,而是“正常”打印呢?您可以使用以下方法: var x = 0.00000001; var toPrint = x.toFixed(7); 这将toPrint设置为x的字符串表示形式,小数点右侧有7位数字。要使用它,您需要知道需要多少位精度。如果您不需要任何尾随的0位数(例如,如果x为0.04),您还需要修剪掉它们。您可以使用以下方法: var x = 0.00000001; var toPr

当我在JavaScript中打印像
0.0000001
这样的浮点时

 1e-7
我怎样才能避免这种情况,而是“正常”打印呢?

您可以使用以下方法:

var x = 0.00000001;
var toPrint = x.toFixed(7);
这将
toPrint
设置为
x
的字符串表示形式,小数点右侧有7位数字。要使用它,您需要知道需要多少位精度。如果您不需要任何尾随的0位数(例如,如果
x
为0.04),您还需要修剪掉它们。

您可以使用以下方法:

var x = 0.00000001;
var toPrint = x.toFixed(7);

这将
toPrint
设置为
x
的字符串表示形式,小数点右侧有7位数字。要使用它,您需要知道需要多少位精度。如果您不需要任何尾随的0位数(例如,如果
x
为0.04),您还需要修剪掉它们。

我有一个简单的解决方案,似乎正在工作

var rx = /^([\d.]+?)e-(\d+)$/;

var floatToString = function(flt) {
  var details, num, cnt, fStr = flt.toString();
  if (rx.test(fStr)) {
    details = rx.exec(fStr);
    num = details[1];
    cnt = parseInt(details[2], 10);
    cnt += (num.replace(/\./g, "").length - 1); // Adjust for longer numbers
    return flt.toFixed(cnt);
  }
  return fStr;
};

floatToString(0.0000001); // returns "0.0000001"
EDIT将其更新为使用
toFixed
(未考虑)


编辑2对其进行了更新,使其正确显示数字
0.0000000 123
,而不是截断并显示
“0.0000000 1”

我有一个简单的解决方案,似乎正在运行

var rx = /^([\d.]+?)e-(\d+)$/;

var floatToString = function(flt) {
  var details, num, cnt, fStr = flt.toString();
  if (rx.test(fStr)) {
    details = rx.exec(fStr);
    num = details[1];
    cnt = parseInt(details[2], 10);
    cnt += (num.replace(/\./g, "").length - 1); // Adjust for longer numbers
    return flt.toFixed(cnt);
  }
  return fStr;
};

floatToString(0.0000001); // returns "0.0000001"
EDIT将其更新为使用
toFixed
(未考虑)

编辑2对其进行更新,使其正确显示数字
0.0000000 123
,而不是截断并显示
“0.0000000 1”

功能无表示(n){
var数据=字符串(n).split(/[eE]/);
if(data.length==1)返回数据[0];
变量z='',符号=+n
函数noExponent(n){
var数据=字符串(n).split(/[eE]/);
if(data.length==1)返回数据[0];

var z='',sign=+这是一个可能的副本,我相信这一页将帮助您这是一个可能的副本,我相信这一页将帮助您找到精度并修剪尾随的零?@clamp精度可能是您根据数字的上下文知道的。@clamp-您无法找到精度。问题是浮点p点值不精确(例如,0.1没有终止二进制扩展)。您只需要选择一个适合您需要的精度。对于尾随的零,这非常简单:
toPrint.replace(/(\..*?)0+$/,“$1”)
将切掉小数点后的尾随零。查找精度并修剪尾随零?@clamp精度可能是您根据数字的上下文知道的。@clamp-您无法找到精度。问题是浮点值不精确(例如,0.1没有终止的二进制扩展)。您只需选择一个适合您需要的精度。就尾随的零而言,这非常简单:
toPrint.replace(/(\..*?)0+$/,“$1”)
将切掉小数点后的尾随零。您需要
\d+
允许指数超过1位的数字。@AaronDufour Good catch,省略该选项。您需要
\d+
允许指数超过1位的数字。@AaronDufour Good catch,省略该选项。谢谢kennebec。事实上,您上面的解决方案是唯一一个可以防止像“0.0000001”(1e-7)这样的数字以科学符号显示的解决方案,因为这样做:“0.0000001”。toFixed(7)仍然会显示:1e-7至少在ChromeThanks kennebec中。实际上,您上面的解决方案是唯一一个可以防止像“0.0000001”(1e-7)这样的数字的解决方案使用科学符号显示,因为这样做:“0.0000001”。toFixed(7)仍将显示:1e-7至少在Chrome中