【解決方法】リスト内のプロパティを丸める方法は?


やあ、
私のプロジェクトには List() があり、ポリラインには Length プロパティがあります。 リスト内のすべてのポリラインを 5 か所に丸めたいと思います。

私が試したこと:

listPolyline = listPolyline.Select(x => Math.Round(x => x.Length, 5)).ToList();

こんな感じでいけると思いました。

誰もこれを行う方法を知っていますか?

前もって)ご返信に感謝いたします

デビッド

解決策 1

それは…複雑です。
「5桁」への丸めは、float値またはdouble値で実際にできることではありません。これらは10進数値として保存されないためです。浮動小数点 10 進数値を、システムが使用する内部バイナリ データに変換します。 これはあなたが理解するのを助けるかもしれません: 単精度浮動小数点形式 – ウィキペディア[^] このように: 浮動小数点数が精度を失う可能性がある理由 | マイクロソフト ラーン[^]

原則として、浮動小数点数で 5 桁の有効数字を表示する場合は、表示用の文字列に変換するときに、数値として桁数に丸めようとするのではなく、書式指定を使用します。

C#
double d = 123.456789012;
Console.WriteLine($"{d:###.####}");

解決策 2

リスト内の項目を変更するために、新しいリストを作成する必要はありません。 リスト内のアイテムを反復処理して変更するだけです。

C#
foreach (Polyline x in listPolyline)
{
    x.Value = Math.Round(x.Value, 5);
}

唯一の複雑さは、使用している場合に発生します struct; その場合、行った変更はリスト内の値ではなく、構造体のコピーに適用されます。 変更された値でリストを更新する必要があります。

C#
for (int index = 0; index < listPolyline.Count; index++)
{
    Polyline x = listPolyline[index];
    x.Value = Math.Round(x.Value, 5);
    listPolyline[index] = x;
}

構造体型 – C# リファレンス | マイクロソフト ラーン[^]

コメント

タイトルとURLをコピーしました