|
4
|
| dummzeuch Stijn Sanders · 技术社区 · 16 年前 |
|
|
1
4
2.15不能用浮点格式精确表示,因此如果不分析给定浮点格式中浮点值的二进制表示形式,就不可能说出该值是如何舍入的; 2.25以浮点格式精确表示,舍入结果必须是可预测的; 我测试了一些用浮点格式精确表示的值的舍入,发现STR总是向上舍入正值,向下舍入负值。STR不遵循“银行舍入法”,例如:
|
|
|
2
2
我认为你看到的问题是,许多可以用十进制表示法精确表示的数字只能用二进制的重复小数来表示。因此,可能2.15不能用双精度表示,而2.149999999234(或其他)是用二进制表示法可以得到的最接近的值。 由于数字的最接近二进制表示严格小于2.15,Str函数将向下舍入,而不是向上舍入。 |
|
|
3
1
看起来像是浮点舍入错误。当您查看在Delphi中生成的汇编代码时,您可以看到这两个操作都调用了\u Str2Ext,它将扩展名转换为字符串。因此,为了做到这一点,它必须把你的替身变成一个延伸的幕后:
|
|
|
4
0
我对此进行了研究,发现添加0.000001将产生正确的双倍结果。 |
|
|
5
0
注意这里有两个方面。 首先,十进制文字值可能被舍入为二进制浮点数。这意味着,放入汇编代码中的数字可能与您写下的数字略有不同。如果最近的machinenumber稍微小一些,它可能会显示为应该向上舍入的值被STR向下舍入。 第二,使用FPU statusword中配置的舍入,对得到的二进制浮点数进行舍入,希望外部库不会更改这个舍入。 |
|
zeus · 如何在调整数组大小后保持指向动态数组的指针有效? 1 年前 |
|
|
SignalOne · 德尔福(FMX)循环参考 2 年前 |
|
|
Sascha Ott · 如何从线程调用线程的方法? 2 年前 |
|
|
user1580348 · 问题:如何在上次最小化后还原应用程序? 2 年前 |
|
tua · Delphi的TLinkLabel坏了吗? 2 年前 |
|
|
Frank.Wu · delphi:RGB到HSL不正确 2 年前 |