【问题标题】:Divide long number by 10 or 100?将长数除以 10 还是 100?
【发布时间】:2014-03-01 16:54:15
【问题描述】:

我有两个字符串,想将它们分开。据我所知,你不能分割字符串,你首先必须将它们转换为 int、double、decimal 等等。现在,我的问题是字符串的长度是 1000 个字符或更多,所以我不能使用int(因为字符串太长而无法放入其中)。当我想将超过 1000 位的字符串除以 10 或 100 时,我该怎么办?

【问题讨论】:

  • 您是用10100 之间的任意数字除以(因此,它可能是22、48、92),还是除以10 100 个?
  • @ChrisSinclair 我只使用 10 和 100。
  • 您希望结果仍然表示为字符串还是数值?

标签: c# string type-conversion


【解决方案1】:

一种解决方案是使用支持任意长度数量的类型,例如BigInteger.

但是,当您想除以 10 或 100 时,十进制数的解决方案要容易得多。除以 10 无非就是砍掉最后一个字符。除以 100 就是砍掉最后两个字符。所以如果你的输入是一个字符串,你可以使用Substring来解决这个问题:

string number = "124235235235"; // imagine a longer number here

// (integer) division by 10
Console.WriteLine(number.Substring(0, number.Length - 1)); // 12423523523

// (integer) division by 100
Console.WriteLine(number.Substring(0, number.Length - 2)); // 1242352352

如果您想要real 除法,则必须找到小数点的索引,并将其向左移动一个或两个位置:

string number = "123456.78901"; // imagine a longer number here
int i = number.IndexOf(".");

// division by 10
Console.WriteLine(number.Substring(0, i - 1) + "." + number.Substring(i - 1, 1) + number.Substring(i + 1)); // 12345.678901

// division by 100
Console.WriteLine(number.Substring(0, i - 2) + "." + number.Substring(i - 2, 1) + number.Substring(i + 1)); // 1234.5678901

【讨论】:

  • ToString() 方法在大多数情况下最多支持 50 位有效数字;超出此范围的任何数字都变为零。如果您的 BigInteger 值可能超过 50 个有效数字,请使用 ToString("R0") 格式而不是 ToString("N0")。
【解决方案2】:

您可以使用BigInteger,它表示一个任意大的有符号整数。

来自 MSDN:

BigInteger 类型是一个不可变类型,它表示一个 理论上没有上下限的任意大整数 界限。 BigInteger 类型的成员与 其他整数类型(Byte、Int16、Int32、Int64、SByte、UInt16、 UInt32 和 UInt64 类型)。这种类型不同于其他积分 .NET Framework 中的类型,它们的范围由它们的 MinValue 和 MaxValue 属性。

如果您满足以下两个条件,可以尝试以下方法:

注 1: 如果您只想将其除以 10 或 100。
注 2: 如果您希望将结果作为字符串

试试这个:如果你不使用小数点

string num = "12345";
int index= num.IndexOf('.');
if(index>0)
num = num.Substring(0, index);
string dividedBy10 = num.Substring(0,num.Length - 1);//gives you 1234
string dividedBy100 = num.Substring(0, num.Length - 2);//gives you 123

试试这个:如果你想要小数点。

string num = "12345";
int index= num.IndexOf('.');
if(index>0)
num = num.Substring(0,index);
string dividedBy10 = num.Insert(num.Length - 1, ".");//gives you 1234.5
string dividedBy100 = num.Insert(num.Length - 2, ".");//gives you 123.45

【讨论】:

  • num="123.45" goto firstComment;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多