我有一个表单输入来获取一个数字(这是一个价格)。它可以是像小数字102,5。我必须将它与例如102,6的其他小数进行比较。 怎么办呢?我不想使用round()因为我可以完全比较。
答案 0 :(得分:9)
您可以将absolute(即数字)差异与“epsilon”(您的“容差” 1 )进行比较:
$epsilon = 0.01;
$diff = abs(102.5 - 102.6); // .1
if ($diff <= $epsilon) {
// The numbers are equal
} else {
// The numbers are not equal enough!
}
并且,请阅读一下:“ What Every Computer Scientist Should Know About Floating-Point Arithmetic ”和“ Comparing floating point numbers ”。
此外,您可能会发现以下SO问题(和答案!)很有趣:
1 这是对的:你决定是什么让这两个数字相等。它可以是0.1
(使1.1
等于1.0
),0.01
(1.02
〜1.03
)等。
答案 1 :(得分:3)
不要将价格存储为浮点数,使用整数(存储美分,而不是美元)。
答案 2 :(得分:0)
只需将此格式设为小数
即可$kinda_decimal = "102,5";
$kinda_decimal = floatval(str_replace(",",".",$kinda_decimal));
并比较