【发布时间】:2021-06-04 10:50:24
【问题描述】:
简单的数学,我想。我得到了 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
Int(((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;
【问题讨论】:
-
你不能用像 double 这样的二进制浮点类型来表示这个数字。你应该使用十进制类型。
标签: delphi-5