JavaScript工程输入库

javascript engineering input library

本文关键字:输入 程输入 JavaScript      更新时间:2023-09-26

我正在为工程仿真编写一个基于 Web 的前端。后端仅接受非前缀 SI 单位(如米或瓦特(中的值。但是,最好允许用户以他们希望的任何单位输入值。 例如,如果需要输入距离,可以输入:

15 inches
3.1 meter
1.4 km

但以下值:

12 seconds
5 pounds
147 watts

将被拒绝。我首先尝试使用 js-quantities,但它没有以最直观的方式解析派生单位。它要求在每个乘法单元之间放置一个空格。例如,要输入以安培小时为单位的电量,100 Ah无效,但100 A h是可以接受的。此外,js-quantity不支持扭矩或温度单位(只有温差,例如,您无法将华氏度转换为摄氏度(

然后,我尝试使用谷歌计算器 API 进行单位转换,但它会产生难以解析小数字的结果:

将 5 nm 转换为米

请求:

http://www.google.com/ig/calculator?hl=en&q=5%20nm=?m

响应:

{lhs: "5 nanometers",rhs: "5.0 'x26#215; 10'x3csup'x3e-9'x3c/sup'x3e meters",error: "",icc: false}
在我看来

,修改js数量会相当容易。

您只需编辑函数 parse(val( 函数。您尝试解析,失败后只需按照非常简单的规则集的要求插入空格。你从左到右遍历字符串并识别单位并拆分字符串。

但是,我可能会使用另一种解决方案,当用户输入它时,您已经将其拆分(通过相同的规则(。这样,当用户输入一个值时,它可以显示 Ah 的"使用 amp 小时数",用户可以看到一切都是他想要的方式。这样,您可以为用户提供从列表(或更高级的构建器(中进行选择,如果这不是他的意思。

谷歌计算器输出似乎不太难解析。

我会做这样的事情:

//Parse JSON output to JS variables
    ret = JSON.parse(JSON.stringify({lhs: "5 nanometers",rhs: "5.0 'x26#215; 10'x3csup'x3e-9'x3c/sup'x3e meters",error: "",icc: false} ));
  //ret = Object {lhs: "5 nanometers", rhs: "5.0 &#215; 10<sup>-9</sup> meters", error: "", icc: false}
  var lhs = new Object();
  //Check if lhs has exp notation 
  if (ret.lhs.search("&#215; ")!==-1) {
  //If so, conversion is a bit harder...but not much
  temp = ret.lhs.split("&#215; ");  
  lhs.base = temp[0]
  temp = temp[1].split("<sup>")[1].split("</sup>");
  lhs.exp = temp[0];
  lhs.unit = temp[1];
  lhs.num = parseFloat(lhs.base)*Math.pow(10,parseFloat(lhs.exp));
} else {
  //If no, piece of cake
  temp = ret.lhs.split(" ");  
  lhs.num = parseFloat(temp[0]);
  lhs.unit = temp[1];
}
//Exactly the same for rhs
var rhs = new Object();    
if (ret.rhs.search("&#215; ")!==-1) {
  temp = ret.rhs.split("&#215; ");  
  rhs.base = temp[0]
  temp = temp[1].split("<sup>")[1].split("</sup>");
  rhs.exp = temp[0];
  rhs.unit = temp[1];
  rhs.num = parseFloat(rhs.base)*Math.pow(10,parseFloat(rhs.exp));
} else {
  temp = ret.lhs.split(" ");  
  lhs.num = parseFloat(temp[0]);
  lhs.unit = temp[1];
}
console.log("Converted",lhs.num,lhs.unit,"to",rhs.num,rhs.unit);

输出:将5纳米转换为5e-9米

由于您现在将 lhs 和 rhs 作为数字 JavaScript 变量,并将它们的单位作为字符串,因此您可以根据需要格式化/处理它们。

你看过数学吗?

http://mathjs.org/

还没有派生单位(我不相信(,但他们正在研究它。 除此之外,它可能是最接近您想要的东西。

如果您需要更多特定于工程行业的功能,则需要在某个时候扩展库。