为了账号安全,请及时绑定邮箱和手机立即绑定

从 API 获取数据并将字符串转换为数字

从 API 获取数据并将字符串转换为数字

小怪兽爱吃肉 2022-12-22 13:09:08
我有两个问题。首先,当从 API 获取数据时,我只在我设置的时间间隔后才获取数据。但是,我需要立即接听第一个电话。其次,当我将接收到的数据转换为数字时,我丢失了部分数字,例如收到 11,518.6217 而我只得到 11。有人能帮帮我吗?    class Currencies extends Component {      state = {        inputField: 0,        exRates: 0,      };      componentDidMount() {        try {          setInterval(async () => {            const res = await fetch(              "https://api.coindesk.com/v1/bpi/currentprice.json"            );            const exRates = await res.json();            console.log(exRates.bpi);            this.setState({ exRates: exRates.bpi });          }, 6000);        } catch (err) {          console.log(err);        }      }      BTCChangeHandler = (event) => {        this.setState({ inputField: event.target.value });      };      render() {        const exRates = this.state.exRates;        const currData = Object.values(exRates).map((value) => value.rate);        const rates = currData.map(parseFloat);        console.log(rates);        return (          <div>            <input              type="number"              placeholder="Enter BTC value"              onChange={this.BTCChangeHandler}            />            <Currency name="USD" value={this.state.inputField * rates[0]} />            <Currency name="GPB" value={this.state.inputField * rates[1]} />            <Currency name="EUR" value={this.state.inputField * rates[2]} />          </div>        );      }    }    export default Currencies;
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

这是一个区域设置问题。Api 提供的值有一个,表示千位和一个.表示小数。您的客户可能使用相反的方式。首先,您必须将字符串转换为您的客户语言环境,然后您可以将其解析为数字。

您可以使用本文中提到的库。或者您可以创建自己的函数来切换符号。


查看完整回答
反对 回复 2022-12-22
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您可以尝试setTimOut而不是setInterval然后返回一个在 api rest 中获取数据的承诺



查看完整回答
反对 回复 2022-12-22
?
互换的青春

TA贡献1797条经验 获得超6个赞

我正在使用 setInterval,但在第一次调用时我需要立即调用它


您应该手动调用它,以及在setInterval.


let dofetch = async () => {

  const res = await fetch(

    "https://api.coindesk.com/v1/bpi/currentprice.json"

  );

  const exRates = await res.json();

  console.log(exRates.bpi);

  this.setState({ exRates: exRates.bpi });

}

setInterval(dofetch, 6000);

dofetch()

我丢失了部分数字,例如收到 11,518.6217 我只得到 11


您的字符串数字格式为,,您应该在将它们传递给parseFloat函数之前将其删除。


parseFloat('11,518.6217') // 11

parseFloat('11,518.6217'.split(',').join('')) // 11.518.6217

所以改变:


currData.map(parseFloat);

到:


currData.map(s => parseFloat(s.split(',').join('')));


查看完整回答
反对 回复 2022-12-22
  • 3 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信