Javascript:如何获取十进制格式的微成员

Javascript:如何获取十进制格式的微成员,javascript,Javascript,我有一个简单的函数,计算小数的数目, 例如,\ud(0.01)=2,\ud(0.001)=3等等 我们在系统中添加了一些数量为0.00000001且功能中断的新硬币 原因如下: 0.00000001.toString()=1e-8,因此我无法按拆分它。并像以前一样计算第二部分的长度 所以问题是-如何用最简单的方法从0.00000001数字中提取字符串'0.00000001' 编辑 我的意思不是确切的'0.00000001',我指的是小数点的任何微数,不带exp。一些函数\ud(x)可以工作\ud

我有一个简单的函数,计算小数的数目, 例如,
\ud(0.01)=2
\ud(0.001)=3
等等

我们在系统中添加了一些数量为0.00000001且功能中断的新硬币

原因如下:
0.00000001.toString()=1e-8
,因此我无法按
拆分它。
并像以前一样计算第二部分的长度

所以问题是-如何用最简单的方法从
0.00000001
数字中提取字符串
'0.00000001'

编辑 我的意思不是确切的
'0.00000001'
,我指的是小数点的任何微数,不带exp。一些函数
\ud(x)
可以工作
\ud(0.0000000000 12)='0.0000000000 12'
等等。通常
toString()
对大(但不要太大)数字所做的操作。

使用带有大量数字的
toFixed()
,然后计算小数点后的零数

函数(num){
var str=固定数量(100);
var分数=str.split('.')[1];
var zeros=分数。匹配(/^0*/)[0]。长度;
返回零+1;
}
console.log(_d(0.1));
console.log(_d(0.01));

console.log(_d(0.000000001))将其保留为完整的小数点:

Number(0.000001)
// 0.000001
0.000001.toFixed(6)
// "0.000001"
将其显示为字符串:

Number(0.000001)
// 0.000001
0.000001.toFixed(6)
// "0.000001"

另一种方法是使用
.toString()
,然后查找
.length-2
(2个字符-'0'。它应该给出零的数量


这种方法的优点是你不需要知道数字中的最大小数位数。

你想要这样的东西吗

函数小数位数(num){
变量匹配=(''+num).match(/(?:\。(\d+))(?:[eE]([+-]?\d+)))$/;
如果(!match){返回0;}
返回Math.max(
0,
//小数点右边的位数。
(匹配[1]?匹配[1]。长度:0)
//调整为科学记数法。
-(匹配[2]?+匹配[2]:0));
}

console.log(十进制(0.00000000 1))
首先,我从这里得到了一些关于这个答案的灵感:

您可以将数字转换为强号,然后检查str.indexOf(“e”)。如果为true,则只需返回字符串的科学符号部分。例如:

  function _d() {
    // your current function here
    if (str.indexOf("e")) {
      var something = str.split("-")[1];
      return something;
    }
  }
编辑:在你们最后一次对我发表评论之前,我一直在做这个,所以这会返回一个数字字符串,我认为这是你们想要的。 撇开有效数字这一点不谈,它有意义且正确,但不能解决您的问题,试试这个。我们取数字,转换为字符串,如果该字符串不是科学记数法,那么答案很简单。如果是科学记数法,那么将字符串拆分两次(在“e-”上拆分一次,然后在“e-”上拆分第0个数组)将str[1]-1零添加到数字的前导,并将数字添加到末尾

function _d(arg) {
  var str = arg.toString();
  if (str.indexOf("e-")) {
    var digits = str.split("e-")[0];
    var zeroes = str.split("e-")[1];
    var zero = Number(zeroes);
    var each = digits.split(".");
    var something = "0.";
    for (var i = 0; i < zeroes-1; i++) {
      something += "0";
    }
    for (var j = 0; j < each.length; j++) {
      something = something + each[j];
    }
    return something;
  }
}
函数(arg){
var str=arg.toString();
if(str.indexOf(“e-”)){
变量位数=str.split(“e-”[0];
var zeroes=str.split(“e-”)[1];
var zero=数量(零);
var每个=位数。拆分(“.”);
var=“0”;
对于(变量i=0;i<0-1;i++){
某物+=“0”;
}
对于(var j=0;j

这不适用于非常大的数字或非常小的负数。而且它非常复杂。

一种方法是
0.00000001.toFixed(8);
你应该得到一个正确处理小数的包,而不是使用浮点数来表示“硬币”。不要相信别人会告诉你其他情况。此函数仅用于渲染目的。我使用此控制台。log(0.0000001.toFixed(7)。split('.')[1]。length)
7
,您在函数中使用的是给定任何数字都无法使用的,因为我必须知道逗号后有多少个数字。在toFixed(20)中我总是有20个。你关心的只是小数点后前导零的数量,对吗?你可以忽略其余的。要忽略尾随零,我必须使用另一个更强大的函数。我认为应该有一个更简单的解决方案。也许你不应该首先使用浮点。@DenisMatafonov在我的up中看到完整的代码日期回答。
Number(0.00000001)='1e-8'
:(这不完全是我想要的,但它能工作,谢谢!仍然无法得到我需要的东西。抱歉,
'0.00000000123'
给了我
1.23e-9
-如果知道
str.slit('e-')[1]=9
,我如何得到逗号后的数字?:(那么您是否需要返回小数点后的位数或数字的文字字符串?例如,对于0.000045,您是否需要将答案设置为6或“0.000045”?答案应该是6如何知道
toFixed()使用的参数)
如果这是您试图用该函数确定的值?我不知道如何确定,但该函数会生成正确的答案0\u 0