1

解析一个非常大的 double 值会返回错误的值。

例如

Double.Parse("987654321098765432109876543210987.99") 

返回9.8765432109876547E+32,这是错误的。如何处理?

我想在我的网页中用逗号分隔显示上述值。请帮忙。

4

3 回答 3

4

转换doublestring. _ _ 默认情况下,它对大数字使用科学记数法,这不是公共网站的最佳选择。我F在示例中使用过,但考虑阅读msdn以查找最适合您需求的格式

var str = Double.Parse("987654321098765432109876543210987.99").ToString("F");

Console.WriteLine (str);

印刷

987654321098765000000000000000000.00
于 2013-03-20T10:07:01.450 回答
3

大整数

double精度有限,因此它只会存储您号码的前 15-16 位数字。为了更精确,请使用System.Numerics.BigInteger- 它不支持非整数,因此您必须自己添加小数点(如果您有固定的小数位数)。

大整数结构

.NET 框架 4.0+

表示任意大的有符号整数。

(来源:http: //msdn.microsoft.com/en-us/library/dd268287%28v=vs.99%29.aspx

相关功能:

解析

将数字的字符串表示形式转换为其等效的 BigInteger。

命名空间:System.Numerics

程序集:System.Numerics(在 System.Numerics.dll 中)

public static BigInteger Parse(string value)

(来源:http: //msdn.microsoft.com/en-us/library/dd268231%28v=vs.100%29.aspx

例子:

import System.Numerics.BigInteger;
BigInteger.Parse("98765432109876543210987654321098999").ToString(); // note, no dot

您还需要引用 System.Numerics 程序集。

大定点数

如果需要在数字中有一些固定数量的小数,您可以自己实现定点运算和 I/O。在此示例中,我将使用两位小数,但可以轻松修改。

关键是不要使用原始数字,而是它的倍数。例如,如果您的号码是X,则它在内部表示为X * 100

加减

加法和减法无需修改即可工作。让我们考虑数字 X、Y 和 Z,以及它们的内部表示:

X + Y = Z

X*100 + Y*100 = Z*100

两个方程都是正确的。

乘法和除法

乘法和除法需要一些算术。让我们修改前面的乘法示例:

X * Y = Z

(X*100) * (Y*100) = Z*100 <--- WRONG

您需要稍微修改一下方程式:

X * Y = Z

(X*100) * (Y*100) = Z*100*100

Z * 100 = (X*100) * (Y*100) / 100

所以你需要将结果除以 100 才能得到正确的内部表示。使用除法,您需要将两个操作数分别乘以 100。

输入输出

如果您的输入始终包含两位小数,您只需删除小数点即可获得该数字的内部表示。自由格式输入需要更多的工作。

在输出中,您必须在最后两位数字之前注入小数点才能获得正确的输入。此外,如果数字小于 0,则可能必须在前面插入零。

于 2013-03-20T10:32:45.737 回答
2

您可以使用自定义格式

Double.Parse("987654321098765432109876543210987.99").ToString("0,0.00")

输出:"987,654,321,098,765,000,000,000,000,000,000.00"

您还可以下载此实用程序来测试各种形式

于 2013-03-20T10:47:59.373 回答