分割两个整数时如何获得浮点值? (PHP)

时间:2013-06-20 15:55:42

标签: php floating divide

嗨我试图除以两个整数ex:12/13,但我总是得到整数1而不是十进制数。

我尝试输入值,然后手动浮动,但没有成功。

基本上我想要的只是十进制结果,如:0.923 ......

$x = 12;
$y = 13;
echo $value = $x / $y; //Would like to see 0.923 not 1

4 个答案:

答案 0 :(得分:11)

echo $value = $x / (float) $y;

如果将变量$y转换为float,则解释器使用浮点除法而不是整数除法。

因为在两个整数变量上使用整数除法是默认的假设。

如果您使用$y = 13.0(浮点变量作为分母),则会有所不同: 结果总是一个浮点数

答案 1 :(得分:10)

在正常情况下,您的代码应返回浮动值0.923076 ...

您获得舍入整数的原因可能是因为ini setting "precision"设置为0,要解决此问题,请修改php.ini或使用{{ 1}}在计算之前的代码中。

解决此问题的另一种方法是使用BCmath

ini_set("precision", 3);

另一种不使用任何扩展的方法是使用一个小数学技巧,将你想要除以echo $value=bcdiv($a, $b, 3); 的值乘以1000
这样您就可以将3 decimals除以12000,整个部分将为13,然后再乘以1e3,在最后3位之前插入一个逗号/点。

923

function divideFloat($a, $b, $precision=3) { $a*=pow(10, $precision); $result=(int)($a / $b); if (strlen($result)==$precision) return '0.' . $result; else return preg_replace('/(\d{' . $precision . '})$/', '.\1', $result); }

答案 2 :(得分:3)

所有其他答案都不正确,因为PHP的除法将始终返回浮点值,正如官方手册PHP: Arithmetic Operators中明确指出的那样,除了两个操作数都是可以均分的整数的情况。

事实上,问题是错误的:代码应该产生0.923 ......,正如提问者所期望的那样。

讽刺的是,投票的答案(来自@ BulletProof47)是唯一一个不错的(但也毫无意义)。谁知道他在想什么,但我打赌每个人都知道为什么会被投票:D

如果有兴趣,在PHP中进行除法的基础函数是+ (NSDate *)dateWithString:(NSString *)dateString formatString:(NSString *)formatString { return [self dateWithString:dateString formatString:formatString timeZone:[NSTimeZone systemTimeZone]]; } + (NSDate *)dateWithString:(NSString *)dateString formatString:(NSString *)formatString timeZone:(NSTimeZone *)timeZone { static NSDateFormatter *parser = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ parser = [[NSDateFormatter alloc] init]; }); parser.dateStyle = NSDateFormatterNoStyle; parser.timeStyle = NSDateFormatterNoStyle; parser.timeZone = timeZone; parser.dateFormat = formatString; return [parser dateFromString:dateString]; } ,位于 <?php if(isset($_POST["submit"])){ // Checking For Blank Fields.. if($_POST["vname"]==""||$_POST["vemail"]==""||$_POST["sub"]==""||$_POST["msg"]==""){ echo "Fill All Fields.."; }else{ // Check if the "Sender's Email" input field is filled out $email=$_POST['vemail']; // Sanitize E-mail Address $email = filter_var($email, FILTER_SANITIZE_EMAIL); // Validate E-mail Address if (filter_var($email, FILTER_VALIDATE_EMAIL) ){ echo "Don't forget to include your email adress! Otherwise we can't get back to you."; } else{ $subject = $_POST['sub']; $message = $_POST['msg']; $headers = 'From:'. $email . "\r\n"; // Sender's Email $headers .= 'Cc:'. $email . "\r\n"; // Carbon copy to Sender // Message lines should not exceed 70 characters (PHP rule), so wrap it $message = wordwrap($message, 70); // Send Mail By PHP Mail Function mail("marc@example.com", $subject, $message, $headers); echo "Thanks for getting in touch! We'll get back to you ASAP."; } } } ?> ,如下所示:

div_function

答案 3 :(得分:-1)

只需使用$ value =(float)($ x / $ y); //结果将浮动。

干杯!