【问题标题】:Multiplication error in phpphp中的乘法错误
【发布时间】:2014-11-30 15:34:58
【问题描述】:

我正在建立一个网站,人们可以将硬币(网站货币)兑换成比特币。我遇到的问题是,由于某种原因,当我将 $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

我只是不明白问题是什么......

【问题讨论】:

  • 我认为你不应该处理货币
  • 乘法前$bctprice的值是多少?
  • 听起来好像您需要将传入的 var 正确转换为您期望使用它的内容,即不是字符串而是浮点数或整数,然后回显 vars,然后进行计算,然后将其格式化为您想要的准确度。 10.99 或其他任何时间。
  • 7.959E-5 是正确的。
  • 哈哈哈 PeeHaa,别担心我不是在建银行。这是一个会员积分网站。

标签: php echo multiplication


【解决方案1】:

您得到的结果不是错误。它只是一种您不期望/还不知道的格式。 7.959E-50.00007959完全一样,只是写法不同而已。把它想象成7.959E-5 = 7.959 × (10 ^ (-5)) = 0.00007959。它被称为Scientific notation (E notation)。在计算/科学中使用这种表示法,因为您可以用更少的数字显示非常大或非常小的数字(如您的情况)(写起来更短)。

要获取其他格式的数字,请使用 php 函数sprintf()

当您处理比特币值时,您不应该格式化数字,直到只是为了输出。使用比特币,您总是处理非常小的数字,如果您尝试使用格式化的floating point numbers 进行计算,您很快就会遇到精度问题。

【讨论】:

  • 天哪,你不知道我现在感觉多么愚蠢。谢谢你...:D
【解决方案2】:

在大多数情况下,这是格式问题。你可以简单地使用printf

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

另一个不错的选择是使用number_format(); 例如:

$number = 1234.5678;

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

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2012-01-19
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多