C#替换为长变量
我有一个很大的数字,比如:C#替换为长变量,c#,long-integer,C#,Long Integer,我有一个很大的数字,比如: 1012223457 我需要将此数字中的第三个最高有效位设置为3。我怎样才能做到这一点?有没有办法不用转换成字符串,也不用在其中添加“20000000”就可以实现这一点呢?ToString的少量使用会使代码更加简洁。请记住,我仍然在使用数学函数进行更改,不涉及字符串操作 var number = 123456789; var length = number.ToString().Length; var multiplier = Math.Pow(1
1012223457
我需要将此数字中的第三个最高有效位设置为
3
。我怎样才能做到这一点?有没有办法不用转换成字符串,也不用在其中添加“20000000”就可以实现这一点呢?ToString的少量使用会使代码更加简洁。请记住,我仍然在使用数学函数进行更改,不涉及字符串操作
var number = 123456789;
var length = number.ToString().Length;
var multiplier = Math.Pow(10, length - 3):
var oldDigit = Math.Floor(number / multiplier) % 10;
var change = 3 - oldDigit;
number += change * multiplier;
这样就不用绳子了。大多数卷积是在不使用字符串的情况下确定数字的长度。所以我用了一个数学技巧:
long number = 1012223457;
number += (long)(2*Math.Pow(10.0,(double)((int)(Math.Log10(Math.Max(Math.Abs(number), 0.5)) + 1)-3)));
2*
是您想要添加的值
解决方案是令人困惑的,但它应该是可行的
我甚至没有想到数字长度的诀窍是StackOverflow,但你可以找到它的相关信息。巧合的是,提供的代码是用C#编写的
因此,必须使用一个非常复杂的方法,而不使用字符串,但需要数学函数来补偿。我可能会选择使用字符串的东西,因为可读性会大大提高。请看以下答案:
因此,可以这样做:
int digitpos = 5;
long number = 1080511231123;
int numbertoset = 3;
int digitcount = (int)Math.Floor(Math.Log10(number) + 1);
long exp = (long)Math.Pow(10, digitcount - digitpos);
if (exp == 0) throw new ArgumentException("The number does not contain required digit.");
int targetdigit = (int)(number / exp) % 10;
int multiplier = numbertoset - targetdigit;
long result = number + multiplier * exp;
要替换目标数字,我必须先计算它的值。这不是实现您要求的OP的最佳方法,您必须使用ToString来获得最佳和最可靠的解决方案,但尽管如此,下面的示例满足了您的要求:
var a = 10000000L;
var pows = Enumerable.Range(0, 16).Select(x => (long)Math.Pow(10, x));
var d = pows.First(x => a / x == 0);
var thirdDigit = (a / (d / 1000)) % 100;
a += (long)((3 - thirdDigit) * (d / 1000));
不,是你盖的。为什么添加20000000
不好?在不解释为什么不能使用Y或Z的情况下问“我需要做X而不使用Y或Z”没有多大意义。因为它可能是9个数字,而不总是10个。你还忽略了什么有趣的要求?比如“只使用XXXXX操作”或者类似的东西?它能有50位数长吗?(或者你的意思是“long”作为C#long
也被称为System.Int64
)?为什么你不能将它转换为字符串?甚至在不看你的代码是否工作的情况下,这个问题明确地说“有没有办法不转换为字符串就完成它”。是的,但我觉得OP的意思是“不要用字符串替换数字”。我会先等待OP的回答。还有@VDohnal哦,我一定很累了。你仍然通过ToString()
将number
转换为string
以获得长度。有趣的是,这是公认的答案,但它转换成了OP告诉我们不能使用的字符串。咯咯笑