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
相关产品推荐
相关产品推荐

