AsFloat 转换为字符串

发布于 2024-11-08 02:31:25 字数 350 浏览 0 评论 0原文

你好 我想将“qrysth.Fields[i].AsFloat”转换为字符串,因此我使用以下代码: FormatFloat('0.###############',qrysth.Fields[i].AsFloat)

但我发现结果字符串是 12.000000000000001 而 qrysth.Fields[i].AsFloat 是 12.00 。我知道FormatFloat实际上不是使用12.00来进行转换,而是使用无限数量的二进制来进行转换。 (就像十进制中的 0.1 是 0.1,但在二进制系统中它是无限数 0.00011001100...)

在上述情况下,还有其他方法可以得到 12.00 吗?或者至少 12.000000000000000 ?

Hi
I want to convert "qrysth.Fields[i].AsFloat" to a string so I use the following code:
FormatFloat('0.###############',qrysth.Fields[i].AsFloat)

but I find the result string is 12.000000000000001 while qrysth.Fields[i].AsFloat is 12.00. I know FormatFloat actually not use 12.00 to do the convert, but use an infinite number of binary to do the convert. (like 0.1 in decimal system is 0.1, but it is an infinite number in binary system 0.00011001100...)

Is there other way I could get 12.00 in the case above? or 12.000000000000000 at least?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心房的律动 2024-11-15 02:31:25

如果您确实得到 12.000000000000001,那么您的字段并不正好包含 12,因此输出是正确的。您通过在格式中放置如此​​多的 # 字符来要求高精度。如果您不希望如此精确,请使用不太精确的格式字符串。

If you really get 12.000000000000001, then your field didn't hold exactly 12, so the output is correct. You asked for high precision by putting so many # characters in the format. If you don't want it so precise, then use a less precise format string.

半城柳色半声笛 2024-11-15 02:31:25

FormatFloat('0.00',qrysth.Fields[i].AsFloat) 将给出“12.00”。

为了能够得到“12.000000000000000”,您应该自己进行舍入,因为不会损失精度。

FormatFloat('0.00',qrysth.Fields[i].AsFloat) will give '12.00'.

To be able to get '12.000000000000000' you should do the rounding yourself, as there's no loss of precision.

请远离我 2024-11-15 02:31:25

我要转换
“qrysth.Fields[i].AsFloat”到字符串

那么为什么不使用AsString呢?

qrysth.Fields[i].AsString

只要您不关心确切的宽度,这将为您提供最佳的表示。如果是,请使用 FormatFloat 以及您需要的确切位数 - 换句话说,如果您要查找 12.00,请使用 FormatFloat('## .##', qrysth.Fields[i].AsFloat),甚至更好的 CurrToStrAsCurrency,因为它们自动使用小数点后两位数字。

I want to convert
"qrysth.Fields[i].AsFloat" to a string

Then why not use AsString?

qrysth.Fields[i].AsString

This will give you the best representation, as long as you're not concerned about the exact width. If you are, use FormatFloat with the exact number of digits you need - in other words, if you're looking for 12.00, use FormatFloat('##.##', qrysth.Fields[i].AsFloat), or even better CurrToStrand AsCurrency, as they automatically uses two digits after the decimal point.

暮年慕年 2024-11-15 02:31:25
function MyFormatFloat(V: Double): String;
const
  DesiredMinPrec = '0.000000000000000';
  AssumedMaxPrec = '0.#####';
begin
  Result := FormatFloat(DesiredMinPrec, StrToFloat(FormatFloat(AssumedMaxPrec, V)));
end;
function MyFormatFloat(V: Double): String;
const
  DesiredMinPrec = '0.000000000000000';
  AssumedMaxPrec = '0.#####';
begin
  Result := FormatFloat(DesiredMinPrec, StrToFloat(FormatFloat(AssumedMaxPrec, V)));
end;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文