[ad_1]
やあ、
私のプロジェクトには List
私が試したこと:
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; }
[ad_2]
コメント