mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 12:16:31 +00:00
bugfix: 修复浮点数打印错误的bug
This commit is contained in:
@ -9,7 +9,7 @@
|
||||
|
||||
#include <driver/uart/uart.h>
|
||||
#include <driver/video/video.h>
|
||||
|
||||
#include "math.h"
|
||||
//#include "linkage.h"
|
||||
|
||||
struct printk_screen_info pos;
|
||||
@ -535,6 +535,7 @@ static char *write_num(char *str, ul num, int base, int field_width, int precisi
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
static char *write_float_point_num(char *str, double num, int field_width, int precision, int flags)
|
||||
{
|
||||
/**
|
||||
@ -572,11 +573,11 @@ static char *write_float_point_num(char *str, double num, int field_width, int p
|
||||
if (sign)
|
||||
--field_width;
|
||||
|
||||
int js_num_z = 0, js_num_d = 0; // 临时数字字符串tmp_num_z tmp_num_d的长度
|
||||
ul num_z = (ul)(num); // 获取整数部分
|
||||
ul num_decimal = (ul)(round((num - num_z) * precision)); // 获取小数部分
|
||||
int js_num_z = 0, js_num_d = 0; // 临时数字字符串tmp_num_z tmp_num_d的长度
|
||||
uint64_t num_z = (uint64_t)(num); // 获取整数部分
|
||||
uint64_t num_decimal = (uint64_t)(round(1.0*(num - num_z) * pow(10, precision))); // 获取小数部分
|
||||
|
||||
if (num == 0)
|
||||
if (num == 0 || num_z == 0)
|
||||
tmp_num_z[js_num_z++] = '0';
|
||||
else
|
||||
{
|
||||
@ -605,18 +606,23 @@ static char *write_float_point_num(char *str, double num, int field_width, int p
|
||||
*str++ = sign;
|
||||
|
||||
// 输出整数部分
|
||||
while (js_num_z-- > 0)
|
||||
*str++ = tmp_num_z[js_num_z];
|
||||
|
||||
// while (js_num_z-- > 0)
|
||||
// *str++ = tmp_num_z[js_num_z];
|
||||
while (js_num_z > 0)
|
||||
{
|
||||
*str++ = tmp_num_z[js_num_z - 1];
|
||||
--js_num_z;
|
||||
}
|
||||
*str++ = '.';
|
||||
|
||||
// 输出小数部分
|
||||
while (js_num_d-- > 0)
|
||||
int total_dec_count = js_num_d;
|
||||
for (int i = 0; i < precision && js_num_d-- > 0; ++i)
|
||||
*str++ = tmp_num_d[js_num_d];
|
||||
|
||||
while (js_num_d < precision)
|
||||
while (total_dec_count < precision)
|
||||
{
|
||||
--precision;
|
||||
++total_dec_count;
|
||||
*str++ = '0';
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user