echo — Ошибка умножения в переполнении стека

Я создаю сайт, где люди могут обменивать монеты (валюту сайта) на биткойны. У меня проблема в том, что по какой-то причине, когда я умножаю $btcprice с 3 или менее, эхо действительно странно … ради вас это код, который имеет значение:

<?php
// get 0,01 usd in bitcoins into a variable
$btcprice = file_get_contents('https://blockchain.info/tobtc?currency=USD&value=0.01');
$valueInBTC = 4 * $btcprice;
echo $valueInBTC;
?>

Все, что 4 или выше, будет работать, но если вы попытаетесь умножить это на 3 или меньше, это будет странно. Например это:

<?php
// get 0,01 usd in bitcoins into a variable
$btcprice = file_get_contents('https://blockchain.info/tobtc?currency=USD&value=0.01');
$valueInBTC = 3 * $btcprice;
echo $valueInBTC;
?>

Будет эхо 7.959E-5

Я просто не понимаю, в чем проблема …

1

Решение

Результат, который вы получаете, не является ошибкой. Это просто в формате, который вы пока не ожидаете / не знаете. 7.959E-5точно так же, как 0.00007959 это просто другой способ записать это. Думайте об этом как 7.959E-5 = 7.959 × (10 ^ (-5)) = 0.00007959, Это называется Научная нотация (E нотация). В перечислении / науке это обозначение используется, потому что вы можете показывать очень большие или очень маленькие (как в вашем случае) числа с меньшим количеством цифр (их просто написать короче).

Чтобы получить число в других форматах, используйте функцию php Sprintf ().

Поскольку вы работаете со значениями биткойнов, вы не должны форматировать числа до тех пор, пока они не будут выведены. С биткойнами вы всегда имеете дело с очень маленькими числами, и вы скоро столкнетесь с проблемами точности, если попытаетесь вычислить с отформатированным числа с плавающей точкой.

1

Другие решения

В большинстве случаев это проблема форматирования. Вы можете просто использовать printf

printf("%.2f",$valueInBTC);

Еще одним хорошим вариантом является использование number_format();
Например:

$number = 1234.5678;

// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
1

По вопросам рекламы [email protected]