如何删除 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 中的科学记数法并仅以十进制显示?的主要内容,如果未能解决你的问题,请参考以下文章