문제

I am consuming a web service in C# and inserting the records into a postgres database via the Npgsql library.

I have a cost field that the web service gives me as a decimal type "12.57" my postgres database and application expect it to be a fixed 6 digit number of a BigInt type like "125700"

I cannot think of a great way to do this other than something like convert it to a string, remove the decimal pad a few 0's and convert to an Int64.

Am I missing a simpler way?

Edit: I should add that currently I use an Npgsql parameter type of BigInt and when I feed it the cost, it is just rounding 12.57 to 13 in the database

도움이 되었습니까?

해결책

Why not just multiply by 10000?

다른 팁

If you want to preserve the cost values with 2 digits after the decimal point, multiply the value by 100 before storing it in the database.

string cost = "12.57";
decimal d = decimal.Parse(cost);
if (d >= 10000.0m)
{
    throw new Exception("Input value " + cost + " is too large");
}
int i = (int)(d * 100.0m + 0.5m);
string result = i.ToString();

The + 0.5m will round the value in case there are more than 2 digits after the decimal point.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top