如何在 React Native 中显示保留 2 位小数的数字

Fra*_*yyn 1 javascript reactjs react-native

我正在创建一个计算器应用程序来帮助计算小数,并且想要小数点后两位的值,如下所示:

number     output
------     -------
1          1.00
1.446      1.45
1.567      1.57
Run Code Online (Sandbox Code Playgroud)

我尝试使用 toFixed(2) 但出现错误,因为我使用的是数学而不是字符串。

我也尝试过使用 toPrecision(4) 但我也收到错误

任何帮助将非常感激。

import React from 'react';
import {StyleSheet, Text, View, TouchableOpacity, Vibration} from 'react-native';
import {useState} from 'react';
import { Entypo } from '@expo/vector-icons';

export default function App() {
  const [darkMode, setDarkMode] = useState(false);
  const [currentNumber, setCurrentNumber] = useState('');
  const [lastNumber, setLastNumber] = useState('');

  const buttons = ['C', 'DEL', '/', 7, 8, 9, '*', 4, 5, 6, '-', 1, 2, 3, '+', 0, '.', '=']

  function calculator() {
    
    let lastArr = currentNumber[currentNumber.length-1];
    
    if(lastArr === '/' || lastArr === '*' || lastArr === '-' || lastArr === '+' || lastArr === '.') {
      setCurrentNumber(currentNumber)
      return
    }
    else {
      let result = eval(currentNumber).toString();
      setCurrentNumber(result)
      return
    }
  }

  function handleInput(buttonPressed) {
    if(buttonPressed  === '+' || buttonPressed === '-' || buttonPressed === '*' || buttonPressed === '/') {
      Vibration.vibrate(35);
      setCurrentNumber(currentNumber + buttonPressed)
      return
    }
    else if (buttonPressed === 1 || buttonPressed === 2 || buttonPressed === 3 || buttonPressed === 4 || buttonPressed === 5 ||
            buttonPressed === 6 || buttonPressed === 7 || buttonPressed === 8 || buttonPressed === 9 || buttonPressed === 0 || buttonPressed === '.' ) {
      Vibration.vibrate(35);
    }
    switch(buttonPressed) {
      case 'DEL':
        Vibration.vibrate(35);
        setCurrentNumber(currentNumber.substring(0, (currentNumber.length - 1)))
        return
      case 'C':
        Vibration.vibrate(35);
        setLastNumber('')
        setCurrentNumber('')
        return 
      case '=':
        Vibration.vibrate(35);
        setLastNumber(currentNumber + '=')
        calculator()
        return
    }
    setCurrentNumber(currentNumber + buttonPressed)
  }
Run Code Online (Sandbox Code Playgroud)

Ale*_*ble 5

从您的问题来看,尚不清楚您要在哪里执行转换。然而,这应该会让你走上正轨。

toFixed()toPrecision()返回一个表示数字的字符串。很明显,您不能使用该字符串进行进一步的计算。为此,请使用parseFloat()从字符串中获取浮点数。

const floatingPointNumber = 1.567;
parseFloat(floatingPointNumber.toFixed(2));
parseFloat(floatingPointNumber.toPrecision(3));
Run Code Online (Sandbox Code Playgroud)

关于toFixed()toPrecision(),它们实际上执行相同的操作,但第一个给出 n 位小数,而后者给出 n 位(参见这个问题)。