如何删除 nodejs/html 中的科学记数法并仅以十进制显示?

Posted

技术标签:

【中文标题】如何删除 nodejs/html 中的科学记数法并仅以十进制显示?【英文标题】:How to remove scientific notation in nodejs/html and display in decimal only? 【发布时间】:2020-06-15 19:09:40 【问题描述】:

我正在使用节点 JS 应用程序使用 ses.sendTemplatedEmail API 使用亚马逊 SES 发送电子邮件

我还提到了模板的纯html文件,如果需要的话可以参考

如何实现预期输出?我不知道出了什么问题以及为什么在 JSON 中指定小数时它使用科学

test.js

const aws=require('aws-sdk')
const ses = new aws.SES( apiVersion: "2020-12-01",region:"us-east-1");
var a = 
    "Items": [
        
            "timeSinceInactive": 0.00011574074074074075,
            "id": "myid1",
            "ssid": "myssid",
            "deviceName": "devicename1"
        ,
        
            "timeSinceInactive": 0.00009259259259259259,
            "id": "myid2",
            "ssid": "myssid2",
            "deviceName": "devicename2"
        
    ]

b = JSON.stringify(a)
console.log(b)
async function sesSendEmail(b,ses) 
    var params = 
      Source: "abc@gmail.com",
      Template: "mytemplatename",
      Destination: 
        ToAddresses: ["xyz@gmail.com"] // Email address/addresses that you want to send your email
      ,
      TemplateData: b,
    
    try 
      await ses.sendTemplatedEmail(params).promise()
    
    catch (err) 
      console.log(err)
      throw new Error(err)
    
  ;
  function setAwsCredentials() 
    awsCredentials = 
      region: "us-east-1",
      accessKeyId: "",
      secretAccessKey: ""
    ;
    aws.config.update(awsCredentials);
    console.log("Set credentials successfully")
  
setAwsCredentials()
sesSendEmail(b,ses)

template.html

<table border='2' width='1000'>
    <tr>
        <th>timeSinceInactive</th>
        <th>id</th>
        <th>ssid</th>
        <th>deviceName</th>
    </tr>
    <thead>
        <tr>
            #each Items.[0]
            /each
        </tr>
    </thead>
    <tbody>
        #each Items
        <tr>
            #each this
            <td>
                 this
            </td>
            /each
        </tr>
        /each
    </tbody>
</table>

电流输出

timeSinceInactive        id      ssid    deviceName
1.1574074074074075E-4   myid1   myssid  devicename1
9.259259259259259E-5    myid2   myssid2 devicename2

期望的输出

timeSinceInactive        id      ssid    deviceName
0.00011574074074074075  myid1   myssid  devicename1
0.00009259259259259259  myid2   myssid2 devicename2

编辑

我还需要对数据进行排序,因此不幸的是,将其转换为字符串不是一个可行的选择。

注意

我正在使用来自 Amazon SES 的 createTemlate API,它支持把手。所以 html 代码默认使用把手……这导致了问题,由于某种原因,它以科学记数法形式出现,我如何只将其设为十进制?

【问题讨论】:

【参考方案1】:

您可以考虑在将数字传递给模板之前将它们转换为字符串。这样您就可以控制格式。

【讨论】:

不行,我需要对数据进行排序,我会将其添加到我的问题中。无论如何感谢帮助:)【参考方案2】:

在我看来,您应该切换到一个不太通用的模板,并调用一个自定义助手来显示您想要的数字。模板将如下所示:

<table border='2' width='1000'>
    <tr>
        <th>timeSinceInactive</th>
        <th>id</th>
        <th>ssid</th>
        <th>deviceName</th>
    </tr>
    <thead>
        <tr>
            #each Items.[0]
            /each
        </tr>
    </thead>
    <tbody>
        #each Items
        <tr>
            <td>
               customFormatNumber timeSinceInactive
            </td>
            <td>
               id
            </td>
            <td>
               ssid
            </td>
            <td>
               deviceName
            </td>
        </tr>
        /each
    </tbody>
</table>

这是您可以编写的自定义助手(这只是一个示例,可能不是您想要的那个):

Handlebars.registerHelper('customFormatNumber ', function(item, options) 
    retrun item.toPrecision(10)
);

【讨论】:

我的 NodeJS 应用程序中不需要把手模板。亚马逊 SES 默认支持把手。所以当我使用把手注册 html sn-p 时,亚马逊 SES 能够读取它。 . 所以现在的问题是我如何做类似Handlebars.registerHelper 的事情来告诉Amazon SES 支持的车把存在这样的功能?我不认为这是可能的......对此有什么想法?? 是的,你是对的,这是不可能的。抱歉,我不知道它是如此有限。我当时只看到@JasonWadsworth 给出的字符串解决方案。没有任何定制的车把太有限了 请不要抱歉,我真的很感谢您提供帮助 :) .. 是的,我会在排序应该工作之后尝试这样做

以上是关于如何删除 nodejs/html 中的科学记数法并仅以十进制显示?的主要内容,如果未能解决你的问题,请参考以下文章

使用 awk 删除列中的科学记数法

PySpark - 如何在 csv 输出中删除科学记数法

Python中的时间(以毫秒为单位)

如何在 R 中的 read.csv(或其他读取函数)中“关闭”科学记数法?

无法从数据库中删除科学记数法

python代码检测链表中的环并删除环