记一次浮点数比较

<?php
echo "<br>";
printf ( "%01.53f" ,  0.8 );//53位小数表示0.8
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
printf ( "%01.53f" ,  round(0.1+0.7,15) );//精确到15位小数
echo "<br>";
printf ( "%01.53f" ,  round(0.8,15) );//精确到15位小数

echo "<br>";
printf ( "%01.53f" ,  (0.1+0.7) );
echo "<br>";
printf ( "%01.53f" ,  0.8 );
echo "<br>";
var_dump(round(0.1+0.7,15)==round(0.8,15));//如果精确到小数点后15为,则看第16位,是9,所以进1,所以和0.8相同

echo "<br>";
printf ( "%01.53f" ,  (0.2+0.7) );
echo "<br>";
printf ( "%01.53f" ,  0.9 );
echo "<br>";
var_dump(round(0.2+0.7,16)==round(0.9,16));
时间: 2024-12-24 12:18:23

记一次浮点数比较的相关文章

记C语言浮点数运算处理 "坑" 一则

看一小段C语言程序: int main() { float x = 1.3; x = x - (int)x; int i = (int)(x*10); return 0; } 在你心目中, 变量 I 是怎样的结果? 如果你理所当然地认为是3的话, 那么你就错了~~~ 实际结果应该是2.   为什么? 简而言之, x在内存的值并不是精确的1.3, 实际上可能是1.29999999...... 因为在计算机组成原因中有说过, 浮点数无法被准确地表示出来, 只能是一个非常精确的值.. 就算现在你已经知

02C#基础(1)

1.关键字 C#中定义了很多关键字,关键字是构成C#基本语法的,不用去背,用的多就记住了 2.标识符 标识符是用来给类.方法.变量等命名的 命名规则:  (1)由字母.中文(不推荐).数字.下划线组成;  (2)不能以数字开头;  (3)不能是关键字   C#语言是大小写敏感的:demo和Demo是两个标识符  驼峰命名法:每个单词第一个字母大写;  标识符要有意义;标识符的命名规范,不是强制规定,而是“潜规则”:类名.方法名用大写开头;变量名小写开头 3.变量 定义一个变量的格式:变量类型 变

定点数与浮点数

I.定点数 所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的.通常将定点数据表示成纯小数或纯整数,为了将数表示成纯小数,通常把小数点固定在数值部分的最高位之前:而为了将数表示成纯整数,则把小数点固定在数值部分的最后面,如下图所示: 图中所标示的小数点在机器中是不表示出来的,而是事先约定在固定的位置.对于一台计算机,一旦确定了小数点的位置,就不再改变. 假设用n位来表示一个定点数 ,其中 用来表示数的符号位,通常放在最左位置,并用数值0和1分别表示正号和负号,其余位数表示它的量值.如果定

浮点数 复数

有理数 数学上,有理数是一个整数a和一个非零整数b的比,例如3/8,通则为a/b,又称作分数.0也是有理数.有理数是整数和分数的集合,整数也可看做是分母为一的分数. 有理数的小数部分是有限或为无限循环的数.不是有理数的实数称为无理数,即无理数的小数部分是无限不循环的数. 无理数 无理数,也称为无限不循环小数,不能写作两整数之比.若将它写成小数形式,小数点之后的数字有无限多个,并且不会循环. 常见的无理数有非完全平方数的平方根.圆周率(Pi)和e 实数 实数,是有理数和无理数的总称 浮点数 浮点数

剖析金额不能用浮点数表示的原因

??近期支援双十一红包项目.参与到了一个涉及到钱的项目,开发自然十分的谨慎.先抛出我有问题的代码,作用是把以分为单位的金额转成以元为单位的字符串. long adjustFee; String.valueOf(adjustFee / 100.0); ??很自信的以为这行代码简洁明了的完成了使命.@壹双 同学review了我的代码后,指出这段代码会造成精度丢失的问题.先演示一个demo,构造一个浮点数丢失精度的场景. @Test public void addTest() { long l = L

浮点数转换为大写货币金额

/** * 浮点数转换为大写货币金额 * * @author Bobby * */ public class ConvertFloatNumToRMBFormat { private static String[] upperCaseArray = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌&

SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理

原文:SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理 SQL Server 字段类型 decimal(18,6)小数点前是几位? 不可否认,这是一个很低级的问题.... 为什么会问这么低级的问题? 由于这个问题,导致一个数据导入的SP执行失败....以至于困扰了我好几个小时.... 事情是这样的... 公司总部上了一套Oracle的ERP,我们系统中有些数据要从里面取,比如Supplier,Product等. Oracle会导出数据文件,我

浮点数反汇编指令

;//////////////////////////////////////////////////////////////////////////////// ;//// 浮点数载入指令 ;/////////////////////////////////////////////////////////////////////////////// ;助记符 操作数 功能 fld memory(real) ; 将存储器中的实型压人堆栈 fild memory(integer) ;将存储器的整型

11、定点数和浮点数

我们平时都会用到小数,通常我们可以把小数表示成10的幂的形式,如12.21=1x101+2x100+2x10-1+1x10-2.但是有一些很难表示,如1/3. 小数用二进制表示的最简单的方法是BCD码,这在表示钱的时候特别有用. 通常把两个BCD数字存放在一个字节,这种方式成为压缩BCD.由于2的补数不和BCD数一起使用,因此压缩BCD通常需要增加1位用来标识数的正负,该位被称做符号位.用一整个字节保存某个特定的BCD数是很方便的,但要为这个短小的符号位牺牲4位或8位的存储空间. 看个例子,假设