Delphi中SetRoundMode(rmUp)为何使10舍入成10,0001?

2026-04-10 18:552阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计447个文字,预计阅读时间需要2分钟。

Delphi中SetRoundMode(rmUp)为何使10舍入成10,0001?

这段代码示例中,使用了`SetRoundMode`函数来设置舍入模式,然后使用`Memo1.Lines.Add`将计算结果添加到列表中。结果显示为`10,0001`,但作者表示自己没有得到这个结果。作者认为`rmUp`(可能是`SetRoundMode`的参数)会导致结果在`10,000`到`11,000`之间,但不会超过`10,000`。

以下是简化后的内容:

plaintext代码示例:SetRoundMode(rmUp); Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10))); 结果:10,0001我没有得到这个结果。我认为rmUp会使结果在10,000到11,000之间,但不会超过10,000。谁能解释为什么会这样?谢谢。

这段代码:

SetRoundMode(rmUp); Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10)));

结果10,0001.

我根本就没有得到它.

Delphi中SetRoundMode(rmUp)为何使10舍入成10,0001?

我认为rmUp会做类似的事情,围绕10,0001到11,但从不到10到10,000.

谁能解释为什么会这样?

谢谢.

SimpleRoundTo的工作原理如下:

>将输入值除以10-x,其中x是结果中要保留的小数位数.
>将0.5添加到该产品.
>截断总和.
>乘以10-x.

结果是浮点值.与大多数浮点值一样,结果也不准确,即使在您的情况下,您也会以精确值开头.为SimpleRoundTo指定的小数位数为负数,因此步骤1中的除数(对于示例输入)理想情况下为0.01.但是这不能完全表示为浮点数,因此当在步骤1中计算10 / 0.01时,结果不完全是1000.但是,步骤3中的结果将恰好为1000,因此不精确分裂并不重要.但是,步骤4中乘法的不精确性.那个产品不准确.它会略高于10.

因此,SimpleRoundTo返回稍高的值,并且由于您已指定舍入应该上升,因此将SimpleRoundTo的扩展结果转换为CurrToStr的Currency输入将导致正好10.0001.

货币价值是准确的;它们代表一个定点值,一个按小数点后四位缩放的整数.

本文共计447个文字,预计阅读时间需要2分钟。

Delphi中SetRoundMode(rmUp)为何使10舍入成10,0001?

这段代码示例中,使用了`SetRoundMode`函数来设置舍入模式,然后使用`Memo1.Lines.Add`将计算结果添加到列表中。结果显示为`10,0001`,但作者表示自己没有得到这个结果。作者认为`rmUp`(可能是`SetRoundMode`的参数)会导致结果在`10,000`到`11,000`之间,但不会超过`10,000`。

以下是简化后的内容:

plaintext代码示例:SetRoundMode(rmUp); Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10))); 结果:10,0001我没有得到这个结果。我认为rmUp会使结果在10,000到11,000之间,但不会超过10,000。谁能解释为什么会这样?谢谢。

这段代码:

SetRoundMode(rmUp); Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10)));

结果10,0001.

我根本就没有得到它.

Delphi中SetRoundMode(rmUp)为何使10舍入成10,0001?

我认为rmUp会做类似的事情,围绕10,0001到11,但从不到10到10,000.

谁能解释为什么会这样?

谢谢.

SimpleRoundTo的工作原理如下:

>将输入值除以10-x,其中x是结果中要保留的小数位数.
>将0.5添加到该产品.
>截断总和.
>乘以10-x.

结果是浮点值.与大多数浮点值一样,结果也不准确,即使在您的情况下,您也会以精确值开头.为SimpleRoundTo指定的小数位数为负数,因此步骤1中的除数(对于示例输入)理想情况下为0.01.但是这不能完全表示为浮点数,因此当在步骤1中计算10 / 0.01时,结果不完全是1000.但是,步骤3中的结果将恰好为1000,因此不精确分裂并不重要.但是,步骤4中乘法的不精确性.那个产品不准确.它会略高于10.

因此,SimpleRoundTo返回稍高的值,并且由于您已指定舍入应该上升,因此将SimpleRoundTo的扩展结果转换为CurrToStr的Currency输入将导致正好10.0001.

货币价值是准确的;它们代表一个定点值,一个按小数点后四位缩放的整数.