string.format(format,doubleValue) ,精度丢失
Posted
技术标签:
【中文标题】string.format(format,doubleValue) ,精度丢失【英文标题】:string.format(format,doubleValue) , precision lost 【发布时间】:2013-05-09 13:36:27 【问题描述】:我有这个double
值:
var value = 52.30298270000003
当我将其转换为string
时,它会失去其精度:
var str = string.Format("0 some text...", value);
Console.WriteLine(str); // output: 52.3029827
我的double
值上的precision 数可能会在运行时更改。如何强制string.Format
方法使用所有precision?
【问题讨论】:
【参考方案1】:您想使用R
格式说明符
来自MSDN
结果:可以往返到相同数字的字符串。
支持:Single、Double 和 BigInteger。
精度说明符:忽略。
更多信息:The Round-trip ("R") Format Specifier。
String.Format("0:R some text...", value)
会给你
52.30298270000003 some text...
【讨论】:
啊,我需要更多关于***的练习,你们很快:)!好东西,伙计。【参考方案2】:试试这个:
var value = 52.30298270000003;
var str = string.Format("0 some text...", value.ToString("R"));
Console.WriteLine(str); // output: 52.3029827
MSDN 文档中关于 Singles 和 Doubles 的 ToString
方法以及使用 ToString("R")
的内容如下:
默认情况下,返回值只包含7位精度 尽管内部维护了最多 9 位数字。如果值 此实例的位数大于 7 位,ToString(String) 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol 而不是 预期数量。如果您需要更高的精度,请指定格式 “G9”格式规范,它总是返回 9 位 精度或“R”,如果数字可以返回 7 位数字 如果数字只能是,则以该精度或 9 位表示 以最高精度表示。
【讨论】:
双人怎么可能是单身? 当你说“一个双人基本上是一个单身”时,你到底是什么意思? 对不起,我的意思是float和single,然后改成double :|编辑后的答案不会那么混乱。以上是关于string.format(format,doubleValue) ,精度丢失的主要内容,如果未能解决你的问题,请参考以下文章