Skip to content

toFloat

將值轉換為浮點數,如果轉換失敗則返回默認值。

基礎用法

typescript
import { toFloat } from 'radash'

console.log(toFloat('3.14'))        // 3.14
console.log(toFloat('123'))         // 123.0
console.log(toFloat('abc', 0))      // 0
console.log(toFloat(null, 1.5))     // 1.5

語法

typescript
function toFloat(
  value: any,
  fallback?: number
): number

參數

  • value (any): 要轉換的值
  • fallback (number, 可選): 轉換失敗時的默認值,默認為0

返回值

返回轉換後的浮點數,如果轉換失敗則返回fallback值。

示例

轉換字符串

typescript
import { toFloat } from 'radash'

console.log(toFloat('3.14'))        // 3.14
console.log(toFloat('123'))         // 123.0
console.log(toFloat('0.5'))         // 0.5
console.log(toFloat('-2.5'))        // -2.5
console.log(toFloat('3.14e2'))      // 314.0

轉換數字

typescript
import { toFloat } from 'radash'

console.log(toFloat(3.14))          // 3.14
console.log(toFloat(123))           // 123.0
console.log(toFloat(0))             // 0.0
console.log(toFloat(-2.5))          // -2.5
console.log(toFloat(Infinity))      // Infinity
console.log(toFloat(-Infinity))     // -Infinity

處理無效值

typescript
import { toFloat } from 'radash'

console.log(toFloat('abc'))         // 0 (默認fallback)
console.log(toFloat('abc', 1.5))    // 1.5
console.log(toFloat(null))          // 0
console.log(toFloat(null, 2.5))     // 2.5
console.log(toFloat(undefined))     // 0
console.log(toFloat(undefined, 3.5)) // 3.5
console.log(toFloat(NaN))           // 0
console.log(toFloat(NaN, 4.5))      // 4.5

處理特殊字符串

typescript
import { toFloat } from 'radash'

console.log(toFloat(''))            // 0
console.log(toFloat(' ', 1.0))      // 1.0
console.log(toFloat('  3.14  '))    // 3.14 (自動去除空格)
console.log(toFloat('3.14abc'))     // 0 (無法解析)
console.log(toFloat('abc3.14'))     // 0 (無法解析)

處理布爾值

typescript
import { toFloat } from 'radash'

console.log(toFloat(true))          // 1.0
console.log(toFloat(false))         // 0.0

處理數組和對象

typescript
import { toFloat } from 'radash'

console.log(toFloat([]))            // 0
console.log(toFloat({}))            // 0
console.log(toFloat([1, 2, 3]))    // 0
console.log(toFloat({ key: 'value' })) // 0

處理函數

typescript
import { toFloat } from 'radash'

console.log(toFloat(() => {}))      // 0
console.log(toFloat(() => 42))      // 0

在表單處理中使用

typescript
import { toFloat } from 'radash'

function processFormData(formData: any) {
  return {
    price: toFloat(formData.price, 0),
    quantity: toFloat(formData.quantity, 1),
    discount: toFloat(formData.discount, 0)
  }
}

const formData = {
  price: '29.99',
  quantity: '3',
  discount: 'invalid'
}

const processed = processFormData(formData)
console.log(processed)
// { price: 29.99, quantity: 3.0, discount: 0 }

在API響應處理中使用

typescript
import { toFloat } from 'radash'

function processApiResponse(response: any) {
  return {
    id: response.id,
    score: toFloat(response.score, 0),
    rating: toFloat(response.rating, 5.0),
    price: toFloat(response.price, 0)
  }
}

const apiResponse = {
  id: 1,
  score: '8.5',
  rating: null,
  price: 'invalid'
}

const processed = processApiResponse(apiResponse)
console.log(processed)
// { id: 1, score: 8.5, rating: 5.0, price: 0 }

在計算中使用

typescript
import { toFloat } from 'radash'

function calculateTotal(items: any[]) {
  return items.reduce((total, item) => {
    const price = toFloat(item.price, 0)
    const quantity = toFloat(item.quantity, 1)
    return total + (price * quantity)
  }, 0)
}

const items = [
  { price: '10.50', quantity: '2' },
  { price: '5.25', quantity: '3' },
  { price: 'invalid', quantity: '1' }
]

const total = calculateTotal(items)
console.log(total) // 36.75 (10.5*2 + 5.25*3 + 0*1)

處理科學計數法

typescript
import { toFloat } from 'radash'

console.log(toFloat('1.23e4'))      // 12300.0
console.log(toFloat('1.23E-2'))     // 0.0123
console.log(toFloat('1e6'))         // 1000000.0
console.log(toFloat('1.5e-3'))      // 0.0015

處理十六進制和八進制

typescript
import { toFloat } from 'radash'

console.log(toFloat('0xFF'))        // 0 (無法解析十六進制)
console.log(toFloat('0o77'))        // 0 (無法解析八進制)
console.log(toFloat('0b1010'))      // 0 (無法解析二進制)

注意事項

  1. 字符串解析: 只解析標准的十進制數字格式
  2. 空格處理: 自動去除字符串前後的空格
  3. 無效值: 對於無法解析的值,返回fallback值
  4. 布爾值: true轉換為1.0,false轉換為0.0
  5. 特殊值: null、undefined、NaN等返回fallback值

與其他方法的區別

  • parseFloat(): 類似功能,但不會處理null/undefined
  • Number(): 更嚴格的轉換,NaN會返回NaN
  • toFloat(): radash提供的更安全的轉換方法
  • +value: 快速轉換,但不夠安全

實際應用場景

  1. 表單處理: 安全地轉換用戶輸入的數字
  2. API處理: 處理可能包含無效數據的API響應
  3. 計算: 在數學計算中安全地轉換數值
  4. 數據驗證: 驗證和轉換數值類型的數據
  5. 配置處理: 處理配置文件中的數值設置

Released under the MIT License.