2011-08-08 7 views
5

Powiel możliwe:
C# Double - ToString() formatting with two decimal places but no roundingW języku C#, jak uzyskać wymaganą liczbę wartości dziesiętnych bez zaokrąglania?

Używam liczb zmiennoprzecinkowych i chcę uzyskać liczbę miejsc po przecinku bez zaokrąglenia wykonywane.

Na przykład. float x = 12.6789 Jeśli chcę upto 2 miejsca po przecinku, powinienem otrzymać (x = 12,67) i NOT (x = 12,68), co ma miejsce podczas zaokrąglania.

Plz sugeruje, jaki jest najlepszy sposób na zrobienie tego.

+0

Co próbowaliście? Co nie działało? Proszę napisać swój kod i wyjaśnić, gdzie występują problemy. – Oded

Odpowiedz

8

Powinieneś być w stanie wykorzystać Math.Truncate() na to:

decimal x = 12.6789m; 
x = Math.Truncate(x * 100)/100; //This will output 12.67 
3

Można to osiągnąć przez odlewanie:

float x = 12.6789; 
float result = ((int)(x * 100.0))/100.0; 
1

Prawdopodobnie jest wywołanie ramy tego, ale zawsze można napisać na przykład:

//Scale up, floor, then round down. 
//ie: 1.557 
// scaled up: 155.7 
// floord: 155 
// scaled down: 1.55 
public float MyTruncate(float f, int precision){ 
    float scale = precision * 10; 
    return (Math.Floor(f * scale))/scale; 
} 
Powiązane problemy