我有一个数字(只是一个例子:
"3616,946489653802082229919075063226"
存储在string
中。我想把它转换成OverflowException,但是得到一个decimal
,因为这个值太长,不适合十进制。
在将string
转换为修复错误之前,我希望对其进行舍入。
我该怎么做?
发布于 2019-06-07 05:45:20
解析是特定于区域性的。所以,
可以是十进制的,也可以是千位分隔符。如果,
是一千分隔符,它将被忽略:
"3616,946489653802082229919075063226" -> 3616946489653802082229919075063226m
这个值在decimal.MaxValue
上,所以您会抛出异常。
如果应该将,
视为十进制分隔符,请让系统知道这一点:
decimal result = decimal.Parse(source,
new NumberFormatInfo() { NumberDecimalSeparator = ","});
你会得到3616.9464896538020822299190751m
发布于 2019-06-07 05:46:52
您的问题实际上不是四舍五入的问题,它试图在系统上解析带有逗号的小数点,默认情况下,小数点是小数点分隔符。
您可以尝试这样做,以确保它在所有环境中都得到了很好的解析:
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
var input = "3616,946489653802082229919075063226";
var result = decimal.Parse(input, new NumberFormatInfo() { NumberDecimalSeparator = ","});
Console.WriteLine(result);
}
}
发布于 2019-06-07 05:49:48
给定任意数量的小数位,格式中的单位与小数部分之间有逗号,您可以通过执行以下操作来解决这个问题:
class Program
{
static void Main(string[] args)
{
var decimalPlacesCount = 10;
var decimalSeparator = ',';
var parts = "3616,946489653802082229919075063226".Split(decimalSeparator);
var value = decimal.Parse(parts[0]);
if (parts.Length == 2)
{
value += decimal.Parse($"0.{parts[1].Substring(0, decimalPlacesCount)}");
}
Console.WriteLine(value);
}
}
这有效地将其包围到decimalPlacesCount。
https://stackoverflow.com/questions/56495398
复制相似问题