Consider a standard ASP.NET web application where the user types in some numeric data on a form. On submitting, some business objects are spun up to operate on the numeric data. But server-side textbox controls in .Net return a value of type string. Question: Should the codebehind of the page take responsibility for parsing the strings into numeric data (and throwing errors if invalid), or should the business objects accept strings for their input and parse them themselves?
IMO, the business objects should accept numeric types only. Strings can be parsed in various formats, according to culture specific rules. Numbers are numbers. You don't want to change your business objects for localization - accepting only numbers will make it easier to reuse.
The business objects should only be given properly parsed & verified objects.
Now, should this parsing & verification be done in the codebehind? hard to say, as the codebehind really isn't a layer. Properly, the codebehind should just handle UI issues, and parsing should be done at the controller layer between UI & business. However, most people just stick the controller into the codebehind.
Generally you want your business logic to accept the types it works with, its clearer that way. Formatting your incoming data and validating it before you get to the business logic is a good practice as you aren't actually doing work on the data but preformatting it for the Business layer to work with. This especially helps when the input fails validation, you have less to step through to get it back to the user.