我想要实现的目标是尝试增加Tizen智能手表的心跳传感器返回的值的精确度。 值为Float64数字,因为该语言是Javascript。 我尝试使用这样的函数:
function strip(interval) {
return (parseFloat(interval).toPrecision(4));
}
但没有成功。也许我做错了,比如做一些编程错误,我真的不知道。显然,IDE编译和构建程序包安装没有问题,但我看不到有或没有这个功能包含的东西。
我将在下面发布我的整个代码。请检查何时创建函数strip
。我使用了escamotage if (interval !== 0) {
interval_screen = interval;
}
,因为我不想打印零。请注意,我希望流式传输到ROS主题HeartRateInterval的变量保持为Float;这就是为什么我也使用了parseFloat函数。
谢谢!
代码:
document.addEventListener('tizenhwkey', function(e) {
if(e.keyName === "back")
window.webapis.motion.stop("HRM");
tizen.application.getCurrentApplication().exit();
});
function Connect(){
var ip;
var connection=false;
var interval_screen = 0;
if (document.getElementById("ip").value==="")
{
ip="10.42.0.1";
}
else
{
ip=document.getElementById("ip").value;
}
var ros = new ROSLIB.Ros({
url : 'ws://' + ip +':9090'
});
ros.on('connection', function() {
connection=true;
document.getElementById("Connection_status").setAttribute("color","green");
document.getElementById("Connection_status").innerHTML = 'Connected';
tizen.power.request("SCREEN", "SCREEN_DIM");
});
ros.on('error', function(error) {
document.getElementById("Connection_status").setAttribute("color","orange");
document.getElementById("Connection_status").innerHTML = 'Error';
});
ros.on('close', function() {
document.getElementById("Connection_status").setAttribute("color","red");
document.getElementById("Connection_status").innerHTML = 'Unconnected';
connection=false;
tizen.power.release("SCREEN");
});
var RatePub = new ROSLIB.Topic({
ros : ros,
name : '/HeartRateData',
messageType : 'std_msgs/Float64'
});
var IntervalPub = new ROSLIB.Topic({
ros : ros,
name : '/HeartRateInterval',
messageType : 'std_msgs/Float64'
});
window.webapis.motion.start("HRM", onchangedCB);
function onchangedCB(hrmInfo)
{
var rate = hrmInfo.heartRate;
document.getElementById("mytext").innerHTML = 'Heart Rate= ' + rate + ' bpm';
var interval = hrmInfo.rRInterval/1000;
function strip(interval) {
return (parseFloat(interval).toPrecision(4));
}
if (interval !== 0) {
interval_screen = interval;
}
document.getElementById("mytext1").innerHTML = 'RR Interval= ' + interval_screen + ' s';
var Float64 = new ROSLIB.Message({
data:rate
});
if(connection===true)
{
RatePub.publish(Float64);
}
else
{
document.getElementById("mytext").innerHTML = 'Heart Rate = 0 bpm';
}
var Float64 = new ROSLIB.Message({
data:interval
});
if(connection===true)
{ if (interval !== 0) {
IntervalPub.publish(Float64);
}
else {
}
}
else
{
document.getElementById("mytext1").innerHTML = 'RR Interval = 0 s';
}
}}
答案 0 :(得分:0)
我在这里遗漏了什么,但我找不到你实际称之为新功能的地方? 为什么要在onchangedCB函数中内联创建它?
看起来好像你期望调用该函数,因为你在那里声明它并且调用参数与interval变量相同。哪个不起作用(据我所知,在任何编程语言中)。
然后我会尝试调用该函数parseFloat(interval).toPrecision 直接而不是把它放在另一个函数中。
但我更感兴趣的是: 这里是hrmInfo.rRInterval / 1000 原始价值是千分之一。
删除该分区(如此var interval = hrmInfo.rRInterval;)并查看实际上是否有更多小数点所在的数字。
我无法从你的例子中弥补,但如果价值通常是每分钟120。并且你想知道它背后是否有更精确的值,那么如果它总是像120000这样的全零,那么该值现在应该看起来像1200054,那么创建该事件的系统不会给出更精确的度量。 / p>