簡體   English   中英

PHP 浮點數,小數點后 2 位:.00

[英]PHP float with 2 decimal places: .00

當我進行這種類型轉換時:

(float) '0.00';

我得到0 如何獲得0.00並且仍然將數據類型設為浮點數?

浮點數沒有00.00 :它們是內部( IEEE754 )二進制格式的不同字符串表示形式,但浮點數是相同的。

如果要將浮點數表示為“0.00”,則需要使用number_format將其格式化為字符串:

$numberAsString = number_format($numberAsFloat, 2);

據我所知,PHP 沒有解決方案來解決這個問題。 此線程中給出的所有其他(上方和下方)答案都是胡說八道。

number_format 函數返回一個字符串作為 PHP.net 自己的規范中所寫的結果。

如果你給出的值是 3.00,那么像 floatval/doubleval 這樣的函數會返回整數。

如果你做 typejuggling 那么你會得到一個整數作為結果。

如果你使用 round() 那么你會得到一個整數作為結果。

我能想到的唯一可能的解決方案是使用您的數據庫將類型轉換為浮點數。 以 MySQL 為例:

SELECT CAST('3.00' AS DECIMAL) AS realFloatValue;

使用返回浮點數而不是字符串的抽象層執行此操作,然后就可以了。


JSON輸出修改

如果您正在尋找一種解決方案來修復您的 JSON 輸出以保留 2 位小數,那么您可能可以使用如下代碼中的后格式化:

// PHP AJAX Controller

// some code here

// transform to json and then convert string to float with 2 decimals
$output = array('x' => 'y', 'price' => '0.00');
$json = json_encode($output);
$json = str_replace('"price":"'.$output['price'].'"', '"price":'.$output['price'].'', $json);

// output to browser / client
print $json;
exit();

返回客戶端/瀏覽器:

{"x":"y","price":0.00}

0.00 實際上是 0。如果您需要在回顯時使用 0.00,只需這樣使用number_format

number_format($number, 2);

您可以顯示浮點數

  • 有一定數量的小數
  • 具有特定格式(本地化)

IE

$myNonFormatedFloat = 5678.9

$myGermanNumber = number_format($myNonFormatedFloat, 2, ',', '.'); // -> 5.678,90

$myAngloSaxonianNumber = number_format($myNonFormatedFloat, 2, '.', ','); // -> 5,678.90 

請注意,

第一個參數是您要格式化的浮點數

第二個參數是小數位數

第三個參數是用於在視覺上分隔小數的字符

第 4 個參數是用於在視覺上分隔數千的字符

使用number_format()函數更改數字的顯示方式。 它將返回一個string ,原始變量的類型不受影響。

你可以試試這個,它會為你工作

number_format(0.00, 2)

嘗試這個

$nom="5695.5";
number_format((float)($nom), 2, '.', ','); // -> 5,695.50

$nom="5695.5215";
number_format((float)($nom), 2, '.', ','); // -> 5,695.52

$nom="5695.12";
number_format((float)($nom), 0, '.', ','); // -> 5,695

此頁面上的許多評論都忽略了問題不正確的基本觀點。 浮點是一種二進制表示,專為高效計算而設計; 它基本上沒有任何類型的十進制數字的概念。

所以問這個:

如何獲得“0.00”而不是“0”並且仍然將數據類型設為浮點數?

就像這樣問:

我如何獲得“deux”而不是“zwei”並且仍然使用英語?

無論您將輸入指定為“2”、“2.0”還是“2.000000000”,如果您要求一個浮點值,則將存儲在內存中的是以下內容(在 IEEE 754 雙精度中):

010000000000000000000000000000000000000000000000000000000000000000

如果轉換為整數,則存儲在內存中的值是這樣的(假設是 64 位系統):

000000000000000000000000000000000000000000000000000000000000000010

(請注意,在這種情況下,“整數”不僅僅是“整數”的同義詞,它是一種特定的數據類型,對於如何在內存中表示值有自己的規則。)

相比之下,字符串“2”看起來像這樣:

00110010

字符串“2.00”看起來像這樣:

00110010001011100011000000110000

(在 PHP 程序中,內存中實際上會有額外的信息,例如類型的指示符,但這在這里並不真正相關。)


所以,這個問題只能通過將其改寫為轉換來回答:給定浮點數的輸入,我如何選擇具有固定小數位數的字符串表示

正如其他人指出的那樣,答案是使用number_format


這個問題沒有提到 JSON,但有幾條評論提到了,所以我還要指出 PHP 的json_encode函數有一個選項JSON_PRESERVE_ZERO_FRACTION ,它將格式化一個浮點數,該浮點數恰好是一個尾隨“.0”的整數,例如:

$example = ['int' => 2, 'float' => 2.0];
echo json_encode($example);
# => {"int":2,"float":2}
echo json_encode($example, JSON_PRESERVE_ZERO_FRACTION);
# => {"int":2,"float":2.0}

再次注意,這是值的字符串表示形式

您可以使用floatval()

浮點數()

您可以使用圓形功能

round("10.221",2);

將返回 10.22

嘗試這個

$result = number_format($FloatNumber, 2);

當我們格式化任何浮點值時,這意味着我們正在將其數據類型更改為字符串。 因此,當我們對任何金額/浮點值應用格式時,它將設置所有可能的符號,如點、逗號等。例如

(float)0.00 => (string)'0.00',
(float)10000.56 => (string) '10,000.56'
(float)5000000.20=> (string) '5,000,000.20'

因此,從邏輯上講,格式化后不可能保留浮點數據類型。

您可以使用這個簡單的功能。 number_format ()

    $num = 2214.56;

    // default english notation
    $english_format = number_format($num);
    // 2,215

    // French notation
    $format_francais = number_format($num, 2, ',', ' ');
    // 2 214,56

    $num1 = 2234.5688;

   // English notation with thousands separator
    $english_format_number = number_format($num1,2);
    // 2,234.57

    // english notation without thousands separator
    $english_format_number2 = number_format($num1, 2, '.', '');
    // 2234.57

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM