php - 浮点乘法和评估问题

标签 php casting floating-point

这个问题最好用代码表达:

$var1 = 286.46; // user input data
$var2 = 3646; // user input data
$var3 = 25000; // minumum amount allowed
$var4 = ($var1 * 100) - $var2; // = 250000
if ($var4 < $var3) { // if 250000 < 250000
    print 'This returns!';
}

var_dump($var4) 输出:float(25000) 转换为 int 时,输出:int(24999) - 从而问题所在。

虽然我真的不知道该怎么办。乘以 100 时会出现此问题,虽然我可以采取一些小技巧来解决这个问题(例如 *10*10),但我想知道是否有解决此问题的“真正”解决方案。

谢谢 :)

最佳答案

这是一个可怕的 hacky 解决方案,我有点讨厌自己,但这给出了预期的行为:

<?php

  $var1 = 286.46; // user input data
  $var2 = 3646; // user input data
  $var3 = 25000; // minumum amount allowed
  $var4 = ($var1 * 100) - $var2; // = 250000
  if ((string) $var4 < (string) $var3) { // if 250000 < 250000
      print 'This returns!';
  }

将它们转换为字符串,然后根据需要将它们转换回 int/float 以进行比较。我不喜欢它,但它确实有效。

你真的需要BC Math用于 PHP 中的精确 float 学运算。

关于php - 浮点乘法和评估问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9159427/

相关文章:

php - 将表单字段值传递到新(动态)页面

c - 奇怪的类型转换错误

ios - 使用自定义对象 ios 键入 Cast

iPhone - 将 double 值存储到只有 7 位小数的 NSDictionary 作为数字类型

php - 在 Laravel 中备份 MySQL 表,无需第三方库

php - 需要使用 python 输出 json 的帮助

C警告: assignment makes integer from pointer without a cast/pointer to integer array

java - 查找我的浮点值 ArrayList 的最小值

java - 用于 C++ 程序的 ByteSwapping Java float

php - Paypal 无法列出协议(protocol) ID 的协议(protocol)交易