嗨我试图除以两个整数ex:12/13,但我总是得到整数1而不是十进制数。
我尝试输入值,然后手动浮动,但没有成功。
基本上我想要的只是十进制结果,如:0.923 ......
$x = 12;
$y = 13;
echo $value = $x / $y; //Would like to see 0.923 not 1
答案 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); //结果将浮动。
干杯!