Json Can';当值为整数时,t将小数部分显示为.0

Json Can';当值为整数时,t将小数部分显示为.0,json,delphi,Json,Delphi,情况是这样的: uses System.JSON; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var dd:Double; aJsonObj:TJSONObject; begin dd := 100.0; aJsonObj := TJSONObject.Create(TJSONPair.Create('DecimalValue',TJSONNumber.Create(dd))); S

情况是这样的:

uses
  System.JSON;
     
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  dd:Double;
  aJsonObj:TJSONObject;
begin
  dd := 100.0;
  aJsonObj := TJSONObject.Create(TJSONPair.Create('DecimalValue',TJSONNumber.Create(dd)));
  ShowMessage(aJsonObj.ToString);
end;
显示

{“小数点:100}
我需要的是

{“小数值”:100.0}
我试图更改
JsonFormatSettings
,但找不到添加小数部分的方法。

其中一个接受原始字符串值,该值将在生成的JSON字符串中使用,无需进一步处理。它允许您自己对值进行预格式化:

procedure TForm1.Button1Click(Sender: TObject);
var
  dd: Double;
  aJsonObj: TJSONObject;
begin
  dd := 100.0;
  aJsonObj := TJSONObject.Create(
    TJSONPair.Create('DecimalValue', TJSONNumber.Create(FormatFloat('0.0###', dd, GetJSONFormat))));
  try
    ShowMessage(aJsonObj.ToString);
  finally
    aJsonObj.Free;
  end;
end;
使用上述代码段,值显示为:

{“小数值”:100.0}
您甚至可以将
“任意”
创建为数字:

aJsonObj := TJSONObject.Create(TJSONPair.Create('DecimalValue', TJSONNumber.Create('whatever')));
要获取此(无效)JSON,请执行以下操作:

{“小数值”:随便什么}

旁注:您负责释放您创建的根JSON对象,因为它们没有父对象来管理其生命周期。使用
try..finally
释放根对象,当您使用完它时,正如您在第一个代码段中看到的那样。太糟糕了,这本身就诱使你不去清理。

你能解释一下为什么你需要用尾随的零来格式化数字吗?如果您使用JavaScript中的JSON值,那么这并不重要,因为任何值都表示为双精度64位二进制格式IEEE 754。