PHP String menjadi Float


120

Saya sama sekali tidak terbiasa dengan PHP dan memiliki pertanyaan singkat.

Saya memiliki 2 variabel pricePerUnitdan InvoicedUnits. Berikut kode yang mengatur ini ke nilai:

$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);

Jika saya mengeluarkan ini, saya mendapatkan nilai yang benar. Katakanlah 5000unit yang ditagih dan 1.00untuk harga.

Sekarang, saya perlu menunjukkan jumlah total yang dibelanjakan. Ketika saya mengalikan keduanya bersama-sama, itu tidak berfungsi (seperti yang diharapkan, ini adalah string).

Tapi saya tidak tahu bagaimana mengurai / cast / mengkonversi variabel di PHP.

Apa yang harus saya lakukan?

Jawaban:


202
$rootbeer = (float) $InvoicedUnits;

Harus melakukannya untuk Anda. Lihat Type-Juggling . Anda juga harus membaca Konversi string ke Angka .


Ini adalah metode yang paling sederhana .. tetapi kadang-kadang saya mengalami masalah melakukan ini dengan konfigurasi database tertentu dan VARCHAR>11panjangnya .. belum mempersempit tepatnya mengapa.
Talvi Watia

2
^ perlu dicatat bahwa (float) menghapus 0 dari string jika itu digit pertama

Perhatikan juga bahwa "11.000.00" akan menghasilkan 11, bukan 11000.00 yang diharapkan
CodeJunkie

65

Anda ingin non-lokal-sadar floatvalfungsi :

float floatval (campuran $ var) - Mendapat nilai float dari sebuah string.

Contoh:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343

4
pujian karena menyebutkan kesadaran-lokal. Saya baru saja menghabiskan 1,5 jam melacak masalah yang disebabkan oleh lokal berbeda yang menyebabkan (float)pengubahan di server pertama menjadi "," dan yang kedua menjadi ","
Dr. Gianluigi Zane Zanettini

23

Nah, jika pengguna menulis 1,00,000 maka floatvar akan menampilkan error. Jadi -

floatval(preg_replace("/[^-0-9\.]/","",$input));

Ini jauh lebih dapat diandalkan.

Penggunaan:

$input = '1,03,24,23,434,500.6798633 this';
echo floatval(preg_replace("/[^-0-9\.]/","",$input));

7
Alih-alih ereg gunakan preg $string=preg_replace("/[^0-9\.\-]/","",$string);
ontananza

4
Ya, ereg, Fungsi ini TIDAK DIGUNAKAN LAGI. Jadi perlu menggunakan preg sebagai gantinya ereg :)
HADI

9

Berurusan dengan markup di float adalah tugas yang tidak sepele. Dalam notasi Inggris / Amerika Anda memformat seribu plus 46*10-2:

1,000.46

Tetapi di Jerman Anda akan mengubah koma dan titik:

1.000,46


Ini membuatnya sangat sulit menebak angka yang tepat dalam aplikasi multi-bahasa.
Saya sangat menyarankan penggunaan Zend_MeasureZend Framework untuk tugas ini. Komponen ini akan mengurai string menjadi float menurut bahasa pengguna.


3
Saat ini (+3 tahun), seseorang dapat menggunakan NumberFormatter pada PHP 5.3 dengan intlekstensi.
zamnut

1
PHP 5.3 telah tersedia ketika saya menjawab pertanyaan itu, tetapi sampai komentar Anda saya tidak mengetahui fungsi tunggal ini karena ada lusinan perpustakaan yang melakukan hal serupa. Tetapi mereka tidak akan memiliki cakupan lokal yang bagus seperti yang dimiliki ekstensi intl. Terima kasih, saya akan mencoba mengingatnya.
Tobias P.

1

Gunakan fungsi ini untuk mentransmisikan nilai float dari semua jenis gaya teks:

function parseFloat($value) {
    return floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,3}))*$#e', "str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'", $value));
}

Solusi ini tidak bergantung pada pengaturan lokal mana pun. Jadi untuk input pengguna, pengguna dapat mengetikkan nilai float dengan cara apa pun yang mereka suka. Ini sangat membantu misalnya ketika Anda memiliki proyek yang hanya dalam bahasa Inggris tetapi orang-orang di seluruh dunia menggunakannya dan mungkin tidak berpikir bahwa proyek tersebut menginginkan sebuah titik, bukan koma untuk nilai float. Anda dapat membuang javascript ke dalam campuran dan mengambil pengaturan default browser tetapi masih banyak orang yang menetapkan nilai-nilai ini ke bahasa Inggris tetapi masih mengetik 1,25 daripada 1,25 (terutama tetapi tidak terbatas pada industri terjemahan, penelitian, dan TI)


ada komentar tentang mengapa ini buruk / di mana gagal?
Hafenkranich

Atau ada cara fleksibel yang juga lebih cepat?
Hafenkranich

1
Ini menggunakan bendera e, yang "tidak lagi didukung". Itu tebakan saya.
Leif

0

Saya mengalami masalah dengan cara standar untuk melakukan ini:

$string = "one";

$float = (float)$string;

echo $float; : ( Prints 0 )

Jika tidak ada angka yang valid, parser tidak boleh mengembalikan angka, itu akan memunculkan kesalahan. (Ini adalah kondisi yang saya coba tangkap dalam kode saya, YMMV)

Untuk mengatasinya, saya telah melakukan hal berikut:

$string = "one";

$float = is_numeric($string) ? (float)$string : null;

echo $float; : ( Prints nothing )

Kemudian sebelum memproses konversi lebih lanjut, saya dapat memeriksa dan mengembalikan kesalahan jika tidak ada parse yang valid dari string tersebut.


0

Jika Anda perlu menangani nilai yang tidak dapat dikonversi secara terpisah, Anda dapat menggunakan metode ini:

try {
    $valueToUse = trim($stringThatMightBeNumeric) + 0;
} catch (\Throwable $th) {
    // bail here if you need to
}

0

Anda dapat mengikuti tautan ini untuk mengetahui lebih lanjut tentang Cara mengubah string / angka menjadi angka / float / desimal di PHP. DI SINI APA YANG LINK INI KATAKAN ...

Metode 1: Menggunakan Fungsi number_format (). Fungsi number_format () digunakan untuk mengubah string menjadi angka. Ini mengembalikan nomor yang diformat pada kesuksesan jika tidak memberikan E_WARNING pada kegagalan.

$num = "1000.314"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num), "\n"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num, 2); 

Metode 2: Menggunakan tipe casting: Typecasting dapat langsung mengubah string menjadi tipe primitif float, double, atau integer. Ini adalah cara terbaik untuk mengubah string menjadi angka tanpa fungsi apa pun.

// Number in string format 
$num = "1000.314"; 

// Type cast using int 
echo (int)$num, "\n"; 

// Type cast using float 
echo (float)$num, "\n"; 

// Type cast using double 
echo (double)$num; 

Metode 3: Menggunakan Fungsi intval () dan floatval (). Fungsi intval () dan floatval () juga dapat digunakan untuk mengubah string menjadi nilai integer dan float yang sesuai.

// Number in string format 
$num = "1000.314"; 

// intval() function to convert  
// string into integer 
echo intval($num), "\n"; 

// floatval() function to convert 
// string to float 
echo floatval($num); 

Metode 4: Dengan menambahkan 0 atau dengan melakukan operasi matematika. Nomor string juga dapat diubah menjadi integer atau float dengan menambahkan 0 dengan string tersebut. Dalam PHP, melakukan operasi matematika, string diubah menjadi integer atau float secara implisit.

// Number into string format 
$num = "1000.314"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.1;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.