Emi*_*nem 4 delphi floating-point
使用DEFAULT FloatToStr函数
FloatToStr('0.0000442615029219009')
Run Code Online (Sandbox Code Playgroud)
输出
4.42615029219009E-5
Run Code Online (Sandbox Code Playgroud)
小数点后丢一个零
FloatToStr('0.000442615029219009')
Run Code Online (Sandbox Code Playgroud)
产生
0.000442615029219009
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么第二种情况下的值不输出
4.42615029219009E-4
Run Code Online (Sandbox Code Playgroud)
Dav*_*nan 11
在对文件FloatToStr包含了答案:
转换使用带有15位有效数字的通用数字格式.
要解释该语句,您还需要参考描述该Format函数的主题,特别是有关一般数字格式的文本(强调我的):
使用固定或科学格式将该值转换为最短的十进制字符串.结果字符串中的有效位数由格式字符串中的精度说明符给出; 如果不存在精度说明符,则假定默认精度为15.从结果字符串中删除尾随零,并且仅在必要时显示小数点.如果值中小数点左侧的位数小于或等于指定的精度,并且该值大于或等于0.00001,则结果字符串使用定点格式.否则结果字符串使用科学格式.
不幸的是,文档实际上存在错误.而不0.00001应该阅读0.0001.这个程序说明了这一点:
program FloatToStrScientificFixed;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
var
d: Double;
begin
d := 0.0001;
Writeln(FloatToStr(d*0.9999999));
Writeln(FloatToStr(d));
Writeln(FloatToStr(d*1.0000001));
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
对于您的示例,使用科学记数法格式0.0000442615029219009小于0.0001等.但是0.000442615029219009大于0.0001使用固定表示法进行格式化.
如果你希望你的输出始终用科学记数法,然后使用Format与e 格式字符串.