用PHP将科学记数法转换为十进制

时间:2016-06-16 16:44:18

标签: php

用比特币计算数学给我带来了问题

        $value = bcmul((float)$TotalMoney, $p,8);
        $value = bcdiv((float)$Value, 100,8);

返回8.431e-05作为脚本

中的一个值

我已经尝试了

$newNum = (float)$value; 
$newNum = number_format((float)$value, 8); 
$newNum = sprintf('%.8f',$value);

function scientific_notation($in_float_value, $in_decimal_place_count = -1) 
{

  // Get the exponent
  $abs_float_value = abs($in_float_value);
  $exponent = floor($abs_float_value == 0 ? 0 : log10($abs_float_value));
  // Scale to get the mantissa
  $in_float_value *= pow(10, -$exponent);
  // Create the format string based 
  // on the requested number of decimal places.
  $format = ($in_decimal_place_count >= 0) ? "." . $in_decimal_place_count : "";
  //echo("Format0: $format");
  // Format the exponent part using zero padding.
  $formatted_exponent = "+" . sprintf("%02d", $exponent);
  if($exponent < 0.0)
  {
      $formatted_exponent = "-" . sprintf("%02d", -$exponent);
  }
  $format = "%" . $format . "fe%s";
  //echo("Format1: $format");
  // Return the final value combining mantissa and exponent
  return sprintf($format, $in_float_value, $exponent);

}
$newNum = scientific_notation($value,8);

在phpfiddle中试过它并且它有效。也许问题是将其存储在数据库中。它在数据库中存储为8.431e-05

我做错了什么?

3 个答案:

答案 0 :(得分:2)

使用比特币余额时,建议将数据存储在satoshis数据库中作为整数,然后在屏幕上向用户显示时,可以将其转换回8位小数。

$amount = 0.0132;
$convert = $amount * 100000000;
// store in DB as the converted amount 1320000 as an integer
// when grabbing from DB convert it back
$databaseValue = 1320000;
$convertBack = $databaseValue / 100000000;
$display = number_format($convertBack, 8); 
echo $display;

答案 1 :(得分:2)

使用下面的示例在PHP上将科学记数法转换为浮点/小数:

echo sprintf('%f', floatval('-1.0E-5'));//default 6 decimal places
echo sprintf('%.8f', floatval('-1.0E-5'));//force 8 decimal places
echo rtrim(sprintf('%f',floatval(-1.0E-5)),'0');//remove trailing zeros

答案 2 :(得分:0)

我只使用number_format()

PHP的实际情况:

$n=pow(71663616,2);
echo $n //5.1356738581955E+15

现在调用十进制表示法:

$n=pow(71663616,2);
echo number_format($n) //5,135,673,858,195,456