我有两组代码,一组用 PHP 编写,一组用 C# 编写,两者显示的值略有不同。
下面是 C# 示例:
decimal dayrate = l.dRate * balance / 36500;
Console.WriteLine("dayrate: {0}", dayrate); //dayrate output = 0.0582191780821917808219178082
PHP 示例:
$dayrate = $row['dRate'] * $balance / 36500;
echo "Dayrate: $dayrate"; //dayrate output = 0.058219178082192
为什么会这样,能否在 PHP 示例中更正。
最佳答案
你遇到了精度问题。
- C# 十进制类是一个 128 位十进制值,精确到大约 28 位小数。
- PHP 的 FLOAT 类是一个 64 位十进制值,精确到大约 15 位小数。
您可以通过在 PHP 中使用任意大小的小数来解决此问题:
或者通过使用 C# 中的 double
类,它与 PHP Float 类匹配。
如果您需要这些值完全匹配,并且在使用无理数时遇到问题,您将无能为力。您应该查看您的程序要求并确定所需的精度,然后将值四舍五入或截断到该精度。
关于C# 和 PHP 使用相同的代码逻辑显示两个不同的计算结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37277157/