Я читал Floating-Point guide об использовании типа float в PHP. Ответ заключается в использовании расширения BC Math. Использование строк может представлять float как точный тип и предотвращать проблемы с float и integer.Лучшая практика использования PHP float
Между тем я не нашел хороших примеров на Github и на этом сайте, работающем с расширением Math BC. Что такое чистый способ заставить PHP использовать строки, как их оценивать?
Особенно наилучшим образом использовать расширение BC Math с использованием типов данных MySQL DECIMAL?
Мой пример теста с PHP 5.4.10, правильный ответ: 0,2999999999996
<?php
bcscale(13);
$a = '0.3';
$b = '0.0000000000004';
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.2999999999996
echo '<hr />';
$a = "0.3";
$b = "0.0000000000004";
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.2999999999996
echo '<hr />';
$a = 0.3;
$b = 0.0000000000004;
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
echo '<hr />';
$a = '0.3';
$b = '0.0000000000004' + 0;
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
echo '<hr />';
$a = (string) 0.3;
$b = (string) 0.0000000000004;
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
echo '<hr />';
$a = strval(0.3);
$b = strval(0.0000000000004);
echo $a-$b; // 0.3
echo '<br />';
echo bcsub($a, $b); // 0.3000000000000
?>
um, что случилось с первым и вторым случаем? Если вы хотите узнать «лучший» вариант, одинарные кавычки «лучше, чем двойные», потому что PHP будет использовать дополнительное время для заполнения имен переменных и escape-последовательностей, если вы используете двойные кавычки. – Dave
Спасибо за быстрый ответ Дэйв, используя эти одинарные кавычки, делает работу. Как я буду уверен, что у меня есть значение в правильном типе, прежде чем данные могут потеряться. Например, когда выборка строк из mysql – Mike
@Dave, это просто неверно с любой последней версией php. Пожалуйста, прочитайте [эту статью] (http://nikic.github.com/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html). – Maerlyn