“字符串”类型不可分配给“数字”类型

时间:2019-05-31 11:13:40

标签: angular typescript

我真的不明白类型分配系统如何处理打字稿中的变量。 谁能帮我为什么这不起作用。 谢谢

import React, { Component } from "react";
import { ScrollView, Alert, View, Text, StyleSheet } from "react-native";
import QRCode from "react-native-qrcode";
import { Button } from "native-base";
import { startNFC } from "./NFCHelper";
export default class POS_2MENU extends Component {
  static navigationOptions = ({ navigation }) => ({ header: null });

  constructor(props) {
    super(props);
    const { navigation } = this.props;
    this.state = { tagValue: null, showProgress: false };
    global.payer = navigation.getParam("wallet");
    global.amount = navigation.getParam("amount");
    global.token = navigation.getParam("token");
    global.card = navigation.getParam("card");
  }

  componentWillMount() {
    startNFC(this.handleNFCTagReading);
  }
  componentWillUnmount() {
    // stopNFC();
  }

  handleNFCTagReading = nfcResult => {
    if (nfcResult.Error) {
      this.setState({ tagValue: nfcResult.Error.Message });
    } else {
      alert("nfc data show here");
    }
  };

  render() {
    return (
      <ScrollView style={styles.homeView}>
        {this.state.tagValue ? (
          <Text style={styles.tagValue}>{this.state.tagValue}</Text>
        ) : null}

        <View style={styles.container}>
          <Button
            style={styles.image1}
            activeOpacity={0.5}
          >
            <Text style={{ color: "#fff", fontSize: 20, marginLeft: "18%" }}>
              Tap Card Here
            </Text>
          </Button>
          <QRCode
            value={global.payer + "," + global.amount}
            size={200}
            bgColor="#000"
            fgColor="#fff"
          />
        </View>
      </ScrollView>
    );
  }
}

const styles = StyleSheet.create({
  homeView: {
    marginTop: 20,
    marginBottom: 40
  },
  container: {
    marginTop: 40,
    marginLeft: "25%"
  },
  image1: {
    backgroundColor: "#008CBA",
    width: 200,
    height: 200,
    marginBottom: 40
  },
  tagValue: {
    fontWeight: "bold",
    fontSize: 16,
    marginTop: 40,
    paddingLeft: 40,
    paddingRight: 40,
    textAlign: "center"
  }
});

我希望有一个简单的parseFloat

4 个答案:

答案 0 :(得分:3)

toFixed返回一个string,您将其分配给应为number的变量。您需要另一对()才能将toFixed的结果转换回数字

this.valorParcela = Number(( this.totalCost / this.VendaProdutoVendaNParcelas).toFixed(2));

或者您也可以使用一元+技巧来进行数字转换:

this.valorParcela = +(this.totalCost / this.VendaProdutoVendaNParcelas).toFixed(2);

答案 1 :(得分:0)

toFixed()返回字符串。由于尝试分配给数字类型而引发错误。因此只需再次强制转换为Number(expression)或将此变量设置为字符串this.valorParcela

this.valorParcela = Number(Number(this.totalCost / this.VendaProdutoVendaNParcelas).toFixed(2)));

答案 2 :(得分:0)

.toFixed(2);

总是返回字符串。

您已经分配了类型number

答案 3 :(得分:0)

您可以使用数字(Number)和一元运算符(+)将字符串更改为整数。