C# 使用浮点到字符串表示法的捷径?

C# 使用浮点到字符串表示法的捷径?,c#,floating-point,C#,Floating Point,我有一个浮点数,我需要将它转换成一个精度为5位小数(X.XXXXX)的字符串,这意味着我需要至少有6位小数进行上/下舍入。问题是,获取整数表示的操作会产生一个非常大的数字,我无法存储(我需要类似于大整数的东西,但出于兼容性原因,我不能依赖任何内置的东西,我不会假装我知道如何以相当简单的方式重新发明一个)。我可以先发制人地限制它: result=(m*Pow(5,+exp)/Pow(10,8)) 但这只会为少数规范化浮点给出正确的结果,如0.3f,类似1-E5或113.754f(现在“ceil”部

我有一个浮点数,我需要将它转换成一个精度为5位小数(X.XXXXX)的字符串,这意味着我需要至少有6位小数进行上/下舍入。问题是,获取整数表示的操作会产生一个非常大的数字,我无法存储(我需要类似于大整数的东西,但出于兼容性原因,我不能依赖任何内置的东西,我不会假装我知道如何以相当简单的方式重新发明一个)。我可以先发制人地限制它:

result=(m*Pow(5,+exp)/Pow(10,8))

但这只会为少数规范化浮点给出正确的结果,如
0.3f
,类似
1-E5
113.754f
(现在“ceil”部分又有3个“前导”数字)将是错误的

考虑到我需要最大5(6)位小数精度-有没有捷径可以走

有没有捷径可以走

不,是的

在获得最佳转换结果方面没有任何困难。快捷方式会遇到问题。简言之,在某些情况下,浮点到字符串的转换需要相当数量的代码。通常这意味着使用整数数学进行大部分转换

如果代码愿意容忍某些错误,则为“是”。此错误是浮点运算的累积舍入造成的。由于典型的浮点具有24位二进制精度(类似于至少6位有效的十进制数字),因此“5位十进制精度(X.XXXXX)”(实际上是6位有效的十进制数字)将很难无误获得


使用更广泛的数学可以大大减少错误(可能减少1亿倍),但不能消除错误。

什么语言?为什么具有所需宽度和精度的printf格式字符串不够用?
我不能像我说的那样依赖任何内置内容
(除了基本的数学运算和位移位/二进制逻辑运算)。语言是不相关的,但在这个特殊情况下是C#。pow是内置的。为什么你能用它?因为它的数学实现不会改变。就像加减除法一样。这和我的问题有什么关系?关于“我需要至少有6位小数用于向上/向下取整”:有一位桌子制造商想和你谈谈。