计算后如何正确转换小数
Posted
技术标签:
【中文标题】计算后如何正确转换小数【英文标题】:How to convert decimals correctly after calculation 【发布时间】:2018-06-04 11:23:52 【问题描述】:我有以下问题,如何让它在乘法后显示为字符串0.00004?
$v = -0.00004;
$v = $v * -1;
echo $v; // 4.0E-5
长篇大论
因此我需要保存到 mysql 数据库中,但没有问题,因为我使用以下查询:
$sql_insert = $conn->prepare("insert into tbl_transaction (amount) values ($v)");
但是,当我输出到我的 html 时,它显示 4.0E-5
。我尝试使用 number_format,但在某些情况下小数会远远超过这个,所以它不是一个选择。
【问题讨论】:
看看 number_format() 函数 MySQL 理解指数格式,4.0e-5
有什么问题?
@Barmar 问题是我需要在 HTML 中正确显示 0.00004
那为什么问题是保存到数据库中?
使用带有大量数字的number_format
,例如number_format($v, 20)
【参考方案1】:
如果您在第一次分配后var_dump($v)
,您会发现“问题”不是计算。
$v = -0.00004;
var_dump($v); //float(-4.0E-5)
number_format() 可用于返回值的格式化版本。您可以获取字符串值的长度,并将其传递给 number_format。
var_dump(number_format($v,strlen(strval($v)))); // string(10) "-0.0000400"
所以,你的代码是:
$v = -0.00004;
$v = $v * -1;
$v = number_format($v,strlen(strval($v)));
echo $v //0.000040
在您准备好显示该值之前,您不需要使用 number_format,因为指数数与格式化/十进制数的值相同。
【讨论】:
【参考方案2】:使用所需精度格式化数字后,您需要去除尾随零。
这应该可以解决问题:
$v = -0.00004;
$v = number_format($v * -1, 20);
print rtrim($v, 0);
【讨论】:
【参考方案3】:你可以尝试如下。
$v = -0.00004;
$v = $v * -1;
echo number_format($v, 5);
希望这会有所帮助。
【讨论】:
【参考方案4】:试试这个。
echo sprintf('%f', $v);
或者:
$b = sprintf('%f', $v);
echo $b;
【讨论】:
不能,它正在返回0.000040
。以上是关于计算后如何正确转换小数的主要内容,如果未能解决你的问题,请参考以下文章