Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 十进制格式_C#_Formatting_Decimal - Fatal编程技术网

C# 十进制格式

C# 十进制格式,c#,formatting,decimal,C#,Formatting,Decimal,我有一个十进制=123456和一个整数=5 我想在右边小数点的第五个位置插入“.”,得到1.23456 如何使用标准的格式化函数(即不除以10的幂,然后格式化以添加缺少的零)来实现这一点? 谢谢。你想要这样的吗 decimal d = 10000000; int n=4; string s = d.ToString(); var result = s.Substring(0, s.Length - n) + "." + s.Substring(s.Length - n); 这很难看,;真正的

我有一个十进制=123456和一个整数=5 我想在右边小数点的第五个位置插入“.”,得到1.23456 如何使用标准的格式化函数(即不除以10的幂,然后格式化以添加缺少的零)来实现这一点?
谢谢。

你想要这样的吗

decimal d = 10000000;
int n=4;

string s = d.ToString();
var result = s.Substring(0, s.Length - n) + "." + s.Substring(s.Length - n);

这很难看,;真正的价值是什么?12345还是1.2345?为什么要存储12345,然后尝试将其表示为不同的数字?你想要表达的是一个定点(编码)值,你需要先对它进行解码。i、 e

decimal fixedPoint = 12345
decimaldecoded = fixedPoint / (decimal)10000
decoded.ToString();
因此,在代码中,您应该定义

var fixedPoint = new FixedPointValue(12345, 5);
var realValue = fixedPoint.Decode();
如果其他程序员看到了这一点,那么很容易理解为什么必须以这种方式格式化它

您可以通过


这真的很有趣,至少,我想是的。我希望我没有因为输入负数或考虑可能的十进制输入而愚蠢地过火

            decimal input;
            int offset;
            string working = input.ToString();
            int decIndex = working.IndexOf('.');
            if (offset > 0)
            {
                if (decIndex == -1)
                {
                    working.PadLeft(offset, '0');
                    working.Insert(working.Length - offset, ".");
                }
                else
                {
                    working.Remove(decIndex, 1);
                    decIndex -= offset;
                    while (decIndex < 0)
                    {
                        working.Insert(0, "0");
                        decIndex++;
                    }
                    working.Insert(decIndex, ".");
                }
            }
            else if (offset < 0)
            {
                if (decIndex == -1)
                {
                    decIndex = working.Length();
                }
                if (decIndex + offset > working.Length)
                {
                    working.PadRight(working.Length - offset, '0');
                }
                else
                {
                    working.Remove(decIndex, 0);
                    working.Insert(decIndex + offset, ".");
                }

            }
十进制输入;
整数偏移量;
字符串工作=input.ToString();
int decIndex=working.IndexOf('.');
如果(偏移量>0)
{
如果(decIndex==-1)
{
工作。左焊盘(偏移量“0”);
加工.插入(加工.长度-偏移量,“.”;
}
其他的
{
工作。移除(decIndex,1);
decIndex-=偏移量;
while(decIndex<0)
{
工作。插入(0,“0”);
decIndex++;
}
工作。插入(decIndex,“.”;
}
}
否则如果(偏移量<0)
{
如果(decIndex==-1)
{
decIndex=工作长度();
}
if(十进制+偏移>工作长度)
{
working.PadRight(working.Length-偏移量“0”);
}
其他的
{
工作。移除(decIndex,0);
工作。插入(十进制+偏移量,“.”;
}
}

等等,你想不做数学就从12345转到1.2345吗?祝你好运…如果我可以问的话,你为什么不想分开呢?@AdrianCarneiro 1.2345=12345*.0001你运气不好,步数是1000,而不是10000或100000。你必须除法。好的,123451.2345或0.12345是什么?第一个输入被称为十进制,这增加了10.00001的可能性。您的代码将转换为10.0.0001您是否听说过实例方法
Insert
,如
s.Insert(i,“.”
?@JeppeStigNielsen非常感谢。你让我学到了新东西。看我的回答我不常让人失望,但如果这两倍还没有很快消失,恐怕我不得不这么做。不知道你为什么要投反对票(第二次编辑时被允许输入错误)。。。他将12345存储为十进制,并希望字符串格式的版本表示不同的数字!在这种情况下,值是定点的。我还没有。现在就可以了。他用的是十进制,你用的是双精度。更糟糕的是,他几乎肯定会使用十进制,甚至整数来避免浮点固有的错误。这会否定我的观点吗?他的十进制数存储一个值,而字符串表示形式是完全不同的值?我将修改为十进制,但我仍然认为我的观点是正确的。很抱歉,我的“不知道你为什么投反对票”是为了另一票。您在我回复之前发表了评论:(我编辑过的答案现在更好了吗?我为你的努力喝彩,先生。如果没有其他证据的话,你已经证明不除以100000并使用ToString()是疯狂的。耶!这就是我想要的。
            decimal input;
            int offset;
            string working = input.ToString();
            int decIndex = working.IndexOf('.');
            if (offset > 0)
            {
                if (decIndex == -1)
                {
                    working.PadLeft(offset, '0');
                    working.Insert(working.Length - offset, ".");
                }
                else
                {
                    working.Remove(decIndex, 1);
                    decIndex -= offset;
                    while (decIndex < 0)
                    {
                        working.Insert(0, "0");
                        decIndex++;
                    }
                    working.Insert(decIndex, ".");
                }
            }
            else if (offset < 0)
            {
                if (decIndex == -1)
                {
                    decIndex = working.Length();
                }
                if (decIndex + offset > working.Length)
                {
                    working.PadRight(working.Length - offset, '0');
                }
                else
                {
                    working.Remove(decIndex, 0);
                    working.Insert(decIndex + offset, ".");
                }

            }