You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP trader_sma小数格式化问题:计算结果无小数如何解决?

解决trader_sma结果显示为整数的精度问题

看起来你遇到了PHP中trader_sma计算结果显示精度丢失的问题——明明应该是带小数的数值,直接echo却只输出了整数1。别担心,这其实是PHP默认浮点数输出格式导致的,我们来一步步解决:

先搞清楚真实结果是什么

你给出的数组里,五个数值的总和是:

0.00035606 + 0.00035571 + 0.00035607 + 0.00035606 + 5.00035607 = 5.00177997

除以时间周期5后,真实的计算结果是1.000355994,只是PHP默认输出浮点数时,会自动省略末尾的微小小数部分,才让你看到了1。

几种正确显示真实数值的方法

  • 先确认变量的原始值
    用var_dump可以看到变量的真实类型和完整数值,避免被echo的格式化误导:

    var_dump($ta_sma);
    // 你会看到类似这样的输出:float(1.000355994)
    
  • 用number_format精确控制小数位数
    之前你尝试过number_format但没成功,大概率是没指定足够多的小数位。直接明确你需要保留的位数即可:

    echo number_format($ta_sma, 9); // 输出1.000355994
    

    这里的9是保留的小数位数,你可以根据实际需求调整(比如需要6位就传6)。

  • 用printf/sprintf灵活格式化
    这种方式更适合自定义输出格式,比如要保留9位小数就这么写:

    printf("%.9f", $ta_sma); // 输出1.000355994
    
  • 自动去掉末尾多余的0
    如果不想显示末尾的无效0,可以用这个小技巧:

    echo rtrim(rtrim(sprintf("%.15f", $ta_sma), '0'), '.');
    // 输出1.000355994,自动去掉末尾多余的0和可能的 trailing dot
    

完整测试代码

把这些方法整合起来,你可以运行这段代码验证:

$real = array (0.00035606, 0.00035571, 0.00035607, 0.00035606, 5.00035607);
$timePeriod = 5;
$data = trader_sma($real,$timePeriod);
$ta_sma = $data[4];

// 查看原始值
var_dump($ta_sma);
// 格式化输出9位小数
echo number_format($ta_sma, 9) . PHP_EOL;
// 用printf格式化输出
printf("%.9f", $ta_sma);

内容的提问来源于stack exchange,提问作者J Pavic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:26:24