function TForm1.Flt2str(Avalue:double; ADigits:integer):string;
var v:double; p:integer; e:string;
begin
if abs(Avalue)<1 then
begin
result:=floatTostr(Avalue);
p:=pos('E',result);
if p>0 then
begin
e:=copy(result,p,length(result));
setlength(result,p-1);
v:=RoundTo(StrToFloat(result),-Adigits);
result:=FloatToStr(v)+e;
end else
result:=FloatToStr(RoundTo(Avalue,-Adigits));
end
else
result:=FloatToStr(RoundTo(Avalue,-Adigits));
end;
function round_n(f:double; n:nativeint):double;
var i,m : nativeint;
begin
m := 10;
for i := 1 to pred(n) do
m := m * 10;
f := f * m;
f := round(f);
result := f / m;
end;
9条答案
按热度按时间hkmswyz61#
#9
是代码为9的字符TAB。如果你想把一个浮点值转换成一个有2个小数位的字符串,你可以使用一个格式化函数,例如
Format()
:kpbpu0082#
4urapxun3#
#9
是制表符。如果
f
是浮点变量,则可以执行FormatFloat('#.##', f)
以获得f
的字符串表示形式,小数位数不超过2位。khbbv19g4#
对于浮点到浮点(比如小数点后2位)舍入检查this来自文档。也给出了足够的例子。它使用银行家舍入。
请注意,简单地截断到两位小数(如Format())、舍入到整数和舍入到浮点数是有区别的。
jogvjijk5#
现在,SysUtils单元包含以下解决方案:
如果所需的小数/千位分隔符与当前系统区域设置不同,则可以传递+1 TFormatSettings参数。
bz4sfanl6#
内部浮点格式例程仅适用于大于1的简单数字
对于一个通用的小数位限制器,您需要做一些更复杂的事情,它可以正确地处理定点和使用科学记数法的小于1的值。
我用这个套路
因此,如果位数=2,则1.2349舍入为1.23,1.2349E-17舍入为1.23E-17
ee7vknir7#
这对我很有效:
8iwquhpp8#
wa7juj8i9#
对于分隔符后面的N个位置,使用