计算后如何正确转换小数

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

以上是关于计算后如何正确转换小数的主要内容,如果未能解决你的问题,请参考以下文章

SQL怎么把小数转换为百分比?

sqlServer如何把float转换为字符串,如果没有小数转换后显示整数,如果有小数显示两位小数。

jquery怎么将4位小数转换成1位

如何将值四舍五入到小数点后 3 位?

T-SQL如何将整型值变成浮点型

正确转换浮点数?