FUNCTION ConvertScientificToDecimal : STRING
VAR_INPUT
num : LREAL;
END_VAR
VAR
count : INT := 0; // 循环次数,记录在num大于等于1之前乘以10的次数
strNum : STRING; // 用于保存转换后的字符串
strNumNoDot : STRING; // 不带小数点的字符串
iDotPos : INT; // 小数点的位置
dotIndex : INT; // 小数点的索引位置
i : INT; // 用于循环
zeros : STRING; // 0的个数
END_VARIF ABS(num) < 1.0 THEN
// 通过循环将小数点右移,直到num大于等于1
WHILE ABS(num) < 1.0 DO
num := num * 10;
count := count + 1;
END_WHILE;
// 将num转换为字符串
strNum := LREAL_TO_STRING(num);
IF num <0 THEN
strNum := DELETE(strNum, 1, FIND(strNum,'-'));
ELSE
strNum := strNum;
END_IF
iDotPos := FIND(strNum, '.');
IF ((FIND(strNum, '.0') <>0 AND ( LEN(strNum) - iDotPos) = 1)) THEN
strNumNoDot :=DELETE(strNum,2,iDotPos);
ELSE
// 找到小数点的索引位置
dotIndex := FIND(strNum,'.');
// 删除小数点
strNumNoDot := DELETE(strNum, 1, dotIndex);
END_IF
// 构建由零组成的字符串
zeros := '';
FOR i := 1 TO count - 1 DO
zeros := CONCAT(zeros, '0');
END_FOR
IF num > 0 THEN
// 构建最终的字符串
strNum := CONCAT('0.', CONCAT(zeros, strNumNoDot));
ELSIF num < 0 THEN
strNum := CONCAT('-0.', CONCAT(zeros, strNumNoDot));
ELSE
strNum := '0';
END_IF
ELSE
// 如果num不小于1,直接转换为字符串
strNum := LREAL_TO_STRING(num);
END_IF
// 返回最终的字符串
ConvertScientificToDecimal := strNum;
余洋 2024.3.11 编辑