StringBuilder.Append与float

ric*_*ott 4 c# asp.net

StringBuilder.Append使用float正在截断值。它转换为什么?如何阻止它被截断?

AttributeOrder是类型float,构建字符串时我失去了精度。

if ( AttributeOrder != 0 ) 
{ 
    if ( Result.Length > 0 ) 
    { 
        Result.Append( " AND " ); 
    } 
    Result.Append( COLUMN_ATTRIBUTE_ORDER ); 
    Result.Append( "=" ); 
    Result.Append( AttributeOrder ); 
} 
Run Code Online (Sandbox Code Playgroud)

编辑:这是旧代码,我无法更改基础数据类型。SQL Server中的列为实数,数据类型为float。我需要将其float作为填充字符串显示出来,以用于其他目的,而不是像原来那样放宽精度。

SLa*_*aks 5

您可以float使用格式字符串将转换为字符串,如下所示:

Result.Append(AttributeOrder.ToString("G9"))
Run Code Online (Sandbox Code Playgroud)

或者,

Result.AppendFormat("{0}={1:G9}", COLUMN_ATTRIBUTE_ORDER, AttributeOrder)
Run Code Online (Sandbox Code Playgroud)

但是,您将不能从那里获得超过9位的精度float,并且数字8和9将不准确。


float数据类型只能容纳七位数字的精确度。将值放入float变量后,您将不可避免地失去精度。为了存储SQL Server的所有24位精度,您需要使用decimaldatatype

将变量更改为时decimalAppend将为您提供尽可能多的数字。