Delphi 中不同区域设置不同格式浮点数

zy1mlcev  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(133)

我想在 Delphi 中使用BDE Paradox制作插入SQL语句,

value_a := 0,123;
value_b := 0,234;
value_c := 0,345;
insert into mst_value values (value_a, value_b, value_c);

调试后显示“invalid SQL parameter”等错误,显示sql完整语法,如

insert into mst_value values (0,123, 0,234, 0,345)

应该是点,但是小数点中有逗号,所以我用formatfloat('#.###,value_a)格式化,...'它仍然使用逗号,在控制面板上将区域设置更改为英语后,SQL参数是正确的,这是因为那里的货币或数字格式就像123,123,123.00,所以,我怎么能格式化十进制数字,但从另一个国家,如印度尼西亚的格式一样123,123,123,123.00而不是123.123.123,00。谢谢之前...

e5nszbig

e5nszbig1#

尝试用这种方法,在调用formatFloat函数之前,可以为 Delphi 的变量ThousandsSeparatorDecimalSeparator设置适当的值:

FormatFloat( "$##.000", value_a );
roejwanj

roejwanj2#

如何生成这样字符串?“插入mst_value值(0,123,0,234,0,345)“
这是一个SQL注入,这将允许任何人进入您的程序。
请改用TQuery.Params,并进行严格的数据类型检查。
更多关于这一点的理由请参见http://issuetracker.delphi-jedi.org/view.php?id=5916的评论

3zwtqj6y

3zwtqj6y3#

我同意Arioch的观点。你应该使用参数化查询。这样会让DB引擎为你处理格式,例如:

value_a := 0,123; 
value_b := 0,234; 
value_c := 0,345; 

Query.SQL.Text := 'insert into mst_value values (:value_a, :value_b, :value_c)'; 
Query.ParamByName('value_a').AsFloat := value_a;
Query.ParamByName('value_a').AsFloat := value_b;
Query.ParamByName('value_a').AsFloat := value_c;
Query.ExecSQL;

相关问题