惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
S
Securelist
D
Docker
The Register - Security
The Register - Security
GbyAI
GbyAI
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
罗磊的独立博客
博客园 - 【当耐特】
F
Full Disclosure
WordPress大学
WordPress大学
腾讯CDC
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
SecWiki News
SecWiki News
L
Lohrmann on Cybersecurity
I
InfoQ
MyScale Blog
MyScale Blog
量子位
Cyberwarzone
Cyberwarzone
博客园 - 三生石上(FineUI控件)
The Hacker News
The Hacker News
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园_首页
H
Help Net Security
K
Kaspersky official blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Webroot Blog
Webroot Blog
Blog — PlanetScale
Blog — PlanetScale
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
The Cloudflare Blog
P
Proofpoint News Feed
V
Visual Studio Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tailwind CSS Blog
爱范儿
爱范儿
P
Privacy International News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
The GitHub Blog
The GitHub Blog
C
Cybersecurity and Infrastructure Security Agency CISA
B
Blog RSS Feed

博客园 - chinaprg

干不下去了,准备出售公司了,有想要接手的吗 如何在3周让你的工资从5000+变10000+ 时隔6年后,我又回到博客园了 TExcelApplication,TExcelWorksheet,TExcelWorkbook用法 在客户处实施时几条常用运行命令备忘 堕落于游戏中的朋友可以看看了,打游戏偶尔还能搞点零花钱 路在何方 在b/s开发中经常用到的javaScript技术 C#中对注册表的操作 用C#实现生成PDF文档 C#在客戶端和服務端操作Excel文件 - chinaprg - 博客园 用C# 实现C/S模式下软件自动在线升级[转载,原作者:貓撲] c# 公式计算问题 转帖(http://topic.csdn.net/t/20060313/11/4610686.html) 关于C#下写的Web Service 服务在Delphi下调用时的问题 用C#快速往Excel写数据 - chinaprg - 博客园 asp.net中Dbgrid更新和取消 命令同时出现的操作DEMO说明 - chinaprg - 博客园 常用javascript 常用javascript 网上看到的一篇颇有感触的文章,特意推荐给大家看看!
delphi关于小数位精度的问题
chinaprg · 2017-10-30 · via 博客园 - chinaprg

round函数用的是银行家算法,不好使。

roundTo也不好使。

什么Format呀,

result := int(value * 100 + 0.5) / 100;

全都统统不好用。

后面弄明白原因了,许多时候计算的结果为:17.145,但事实上是17.1449999999等,这时你再四舍五入两位结果就不对,尤其是钱。呵呵

在网上终于猎杀到一个高手的算法,大家分享下:

class function TNewDcFunc.RoundFloat(f:double;i:integer):double;
var
  s:string;
  ef:extended;
begin
  s:='#.'+ StringOfChar('0',i);
  ef:=StrToFloat(FloatToStr(f));//防止浮点运算的误差
  result:=StrToFloat(FormatFloat(s,ef));
end;