問題があり、解決策を見つけることができません。85.12343または100または1.123324のような数値(10進数)があります。結果がセパレータを含めて常に13文字になるようにこれをフォーマットしたいと思います。
100-> 100.000000000
1.123324-> 1.12332400000
toStringで試しましたが、失敗しました。どうすればこれを行うことができますか?
ありがとう :)
問題があり、解決策を見つけることができません。85.12343または100または1.123324のような数値(10進数)があります。結果がセパレータを含めて常に13文字になるようにこれをフォーマットしたいと思います。
100-> 100.000000000
1.123324-> 1.12332400000
toStringで試しましたが、失敗しました。どうすればこれを行うことができますか?
ありがとう :)
int digits = 13;
decimal d = 100433.2414242241214M;
int positive = Decimal.Truncate(d).ToString().Length;
int decimals = digits - positive - 1; //-1 for the dot
if (decimals < 0)
decimals = 0;
string dec = d.ToString("f" + decimals);
必要に応じて、部分全体から数字を削除するのではなく、端数のみを削除します。
最初に13桁を超える可能性がない限り、私はKobiの答えに行きます。その場合、このようなことをする必要があるかもしれません(警告:私はこれを効率的にしようとさえしていません。必要に応じて最適化できます):
public static string ToTrimmedString(this decimal value, int numDigits)
{
// First figure out how many decimal places are to the left
// of the decimal point.
int digitsToLeft = 0;
// This should be safe since you said all inputs will be <= 100M anyway.
int temp = decimal.ToInt32(Math.Truncate(value));
while (temp > 0)
{
++digitsToLeft;
temp /= 10;
}
// Then simply display however many decimal places remain "available,"
// taking the value to the left of the decimal point and the decimal point
// itself into account. (If negative numbers are a possibility, you'd want
// to subtract another digit for negative values to allow for the '-' sign.)
return value.ToString("#." + new string('0', numDigits - digitsToLeft - 1));
}
入力/出力の例:
入出力 ------------------------------------------------------ 100 100.000000000 1.232487 1.23248700000 1.3290435309439872321 1.32904353094 100.320148109932888473 100.320148110 0.000383849080819849081 .000383849081 0.0 .000000000000
文字列を単にパディングするだけでなく、桁数を決定するためにさらに複雑な計算を行うことができます。
String FormatField(Int32 fieldWidth, Decimal value) {
var integerPartDigits =
value != Decimal.Zero ? (int) Math.Log10((Double) value) + 1 : 1;
var fractionalPartDigits = Math.Max(0, fieldWidth - integerPartDigits - 1);
return value.ToString("F" + fractionalPartDigits);
}
値が負であるか、フィールド幅より1桁少ない整数部分がある場合、目的の結果が得られないことに注意してください。ただし、これらの数値をどのようにフォーマットおよび整列するかに基づいて、これらのケースに対応するようにコードを変更できます。
string formatted = original.ToString("0.000000000000").Remove(13);
クイック 'n' ダーティ:
return (value.ToString("0.#") + "0000000000000").Substring(0, 13);
どうですか
string newString;
if (original.ToString().Length >= 13)
{
newString = original.ToString().Substring(13);
}
else
{
newString = original.ToString().PadRight(13, '0');
}
int noofdecimal=3;
double value=1567.9800
value.ToString("#." + new string('0', noofdecimal));
//Result=1567.980