delphi-5 - Delphi 5 - 舍入到小数点后 4 位异常
问题描述
简单的数学,我想。我得到了 99.99% 值的正确答案,但这个值是在现场环境中发现的。
我需要将浮点值四舍五入到 4 位,在第 4 位之后删除任何内容,所以这个例子应该不是问题。
0.6720/0.672 是正确答案,为什么示例 trunc & int 返回 .6719?
((12.0000 * 5.6000) / 100) = 0.672
截断(((12.0000 * 5.6000) / 100) * 10000) / 10000) = .6719
整数(((12.0000 * 5.6000) / 100) * 10000) / 10000) = .6719
我在表单中添加了一个列表视图和按钮以获取以下示例
procedure TForm1.Button1Click(Sender: TObject);
var
x, y : Double;
Itm: TListItem;
begin
x := 12.0000;
y := 5.6000;
Itm := ListView1.Items.Add;
Itm.Caption := 'a. FloatToStr((12.0000 * 5.6000) / 100) ';
Itm.SubItems.Add(FloatToStr((x * y) / 100));
Itm := ListView1.Items.Add;
Itm.Caption := 'b. ((12.0000 * 5.6000) / 100) * 10000 ';
Itm.SubItems.Add(FloatToStr(((x * y) / 100) * 10000));
Itm := ListView1.Items.Add;
Itm.Caption := 'c. ((12.0000 * 5.6000) / 100) * 10000 ';
Itm.SubItems.Add(FloatToStr(((x * y) / 100) * 10000));
Itm := ListView1.Items.Add;
Itm.Caption := 'd. Trunc(((12.0000 * 5.6000) / 100) * 10000) / 10000) ';
Itm.SubItems.Add(FloatToStr( Trunc(((x * y) / 100) * 10000) / 10000) );
Itm := ListView1.Items.Add;
Itm.Caption := 'e. Int(((12.0000 * 5.6000) / 100) * 10000) / 10000) ';
Itm.SubItems.Add(FloatToStr( Int(((x * y) / 100) * 10000) / 10000) );
end;
解决方案
I once had a similar problem...
x:=Trunc(12 * 100 * 5.6) ; // 6720
x:=Trunc(12 * 5.6 * 100) ; // 6719
x:=12*5.6*100;
x:=trunc(x); // 6720
Could be used RoundTo
x:=RoundTo(12*5.6*100,0); // 6720
推荐阅读
- node.js - Ionic 在本地安装但无法运行命令
- python - 将python应用程序转换为Debian包的好方法是什么
- javascript - 全局安装后,我无法在项目中本地安装 Gulp
- javascript - 如何使用 Angular8 编辑特定行内联编辑
- css - 为什么运行 gulp sass 'gulp-sass 5 没有默认的 Sass 编译器时出现此错误;请自己设置一个'
- typescript - 为什么在vite中不能使用reflect-metadata
- r - gregexpr - 如何维护在 r 中提取的数字列表的顺序
- php - set a variable that holds array from a function
- python - 根据它们之间的接近度创建坐标列表
- php - Laravel 查询结果无法正确显示在刀片上